5种goroutine池的实现之对比

1. wazsmwazsm/mortar(★74) 简单介绍 创建一个容量为 N 的池, 在池容量未满时, 每塞入一个任务(生产任务), 任务池开启一个 worker (建立协程) 去处理任务(消费任务)。 当任务池容量赛满,每塞入一个任务(生产任务), 任务会被已有的 N 个 worker 抢占执行(消费任务),达到协程限制的功能。但worker创建后不会回收,除非将整个pool撤销。 结构 type Task struct { Handler func(v ...interface{}) // 函数签名 Params []interface{} // 参数 } // Pool task pool type Pool struct { capacity uint64 // 池的容量,自行制定 runningWorkers uint64 // 正在运行的worker status int64 // 池的状态 chTask chan *Task // 任务队列,worker从中获取任务 PanicHandler func(interface{}) // 自定义的PanicHandler,防止因某个goroutine发生panic而导致服务崩溃。 sync.Mutex // 全局锁 } 核心代码...

June 19, 2021 · 13 min · 李昌