从 0 到 1 手撸一个协程池

304 天前
 IIInsomnia

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

4700 次点击
所在节点    Go 编程语言
45 条回复
lesismal
303 天前
@IIInsomnia #40 频繁创建协程没啥压力的, 我们压测 RPC Echo 每秒几十万都毫无压力而且性能和占用稳定, 除非是任务太多, 创建速度大于执行完的退出速度导致协程数量越来越大或者有泄漏之类的搞爆了
IIInsomnia
302 天前
@lesismal 还有退出的资源也不会及时 GC ,有等待期
lesismal
301 天前
@IIInsomnia #42

> 还有退出的资源也不会及时 GC ,有等待期

不管是用协程池协程常驻去执行 func()还是 go func(), 在 func()内创建的资源都是相同的, 这些资源应该都是 func() return 后可以被 gc, 如果不及时两者也都是不及时, 要想优化 func()内的资源还是得自己加 Pool 之类的

所以主要区别应该还是常驻协程复用和 runtime 复用协程的区别吧
IIInsomnia
301 天前
@lesismal 大佬说的对
lengleng211
297 天前
@IIInsomnia 用 sync.pool 不行吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1089474

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX