Go 通过 goroutines 实现类似线程池的模式 3.0(支持返回处理结果)

概要

Go 语言自身不提供传统意义上的线程池(thread pool)概念,因为它有一套自己的并发模型,基于 goroutines 和 channels。goroutine 是 Go 语言的轻量级线程,调度由 Go 运行时管理,不需要像操作系统线程那样显式创建和管理线程池。

goroutines 在多核处理器上可以并行运行,Go 运行时会自动在可用的逻辑核心之间分配 goroutines。这意味着通常不需要自己管理一个线程池;只需启动所需数量的 goroutines,剩下的工作交给 Go 的调度器来处理。

当然,这里是关于 TaskProcessor 的归纳总结以及完整的源代码。

代码实现

任务处理器 (TaskProcessor)

TaskProcessor 是一个通用的并发任务处理器,设计用于高效地处理各种类型的任务,并收集其处理结果。通过使用 Go 的泛型特性,可以适应不同的数据类型和处理逻辑,增强了代码的灵活性和可重用性。

设计要点
  1. 泛型支持

    • 使用泛型参数 T 表示输入任务类型,R 表示结果类型。
  2. 任务处理函数

    • 定义任务处理函数类型为 func(T) R,允许用户自定义任务处理逻辑。
  3. 并发处理

    • 使用 Goroutines 和通道(channel)实现并发处理,提高任务执行效率。
  4. 结果收集

    • Run 方法返回一个包含所有任务处理结果的切片。
源代码
package taskprocessor

import (
	"sync"
)

// TaskProcessor 是一个用于管理和执行任务的结构体
type TaskProcessor[T any, R any] struct {
   
	nWorkers    int
	processFunc func(T) R // 自定义任务处理函数
}

// NewTaskProcessor 创建一个新的 TaskProcessor 实例,接受自定义的任务处理函数
func NewTaskProcessor[T any, R any](nWorkers int, processFunc func(T) R)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值