从 0 到 1 手撸一个协程池

IIInsomnia · 2024-11-14 11:50:09 · 723 次点击

最近使用 ants ,发现任务不支持 context ,而且非阻塞模式下,拿不到 worker ,会返回 error ;于是决定自己实现一个,非阻塞模式下,任务会缓存到全局链表中待执行,性能还不错 https://github.com/shenghui0779/nightfall

举报· 723 次点击
登录 注册 站外分享
6 条回复  
bli22ard 小成 2024-11-14 12:36:59
OP 水平可以,不过 goroutine 本身已经轻量级,还需要 pool 化吗?想不到需要 pool 化 goroutine 的场景
AEnjoyable 小成 2024-11-14 12:41:07
@bli22ard 任务执行队列,控制任务量,对运行中的任务通过 ctx 控制
bli22ard 小成 2024-11-14 13:12:44
@AEnjoyable 任务执行队列? 为什么要有任务队列,有任务需要执行,立刻就去执行就可以啊 控制任务量 一些场景下,可能要进行并发数量控制,但是这个属于并发数量控制的范围,和 pool 化 goroutine 是两个东西 对运行中的任务通过 ctx 控制 直接运行 goroutine 一样也可以 ctx 去控制
knightdf 小成 2024-11-14 13:22:24
我们目前用的 ants ,有时间看看你这个
layxy 小成 2024-11-14 13:36:08
@bli22ard 某些中间件连接有上限,还是需要池化技术,不过可以不通过协程池来实现类似能力
lvlongxiang199 小成 2024-11-14 13:36:32
@AEnjoyable "控制任务量" 可以用信号量. https://pkg.go.dev/golang.org/x/sync/semaphore
dyllen 小成 2024-11-14 14:00:45
@bli22ard 我也觉得没必要池化,大部分实际是跟风大厂。 实际需要的只是控制最大协程数量。
IIInsomnia 楼主 初学 2024-11-14 14:07:46
其实我这里就是控制最大协程数量
返回顶部