背景
上周我写了一篇文章Go 每日一库之 ants,深入剖析了ants
这个 goroutine 池的实现。在反复阅读了多遍panjf2000关于ants
的起源的文章——GMP 并发调度器深度解析之手撸一个高性能 goroutine pool,我感觉收获满满。这篇文章对于理解 Go 的 goroutine 并发机制有很大的参考价值,强烈建议一读。然后我花了几个小时时间详细阅读了ants
的源码,代码写的很棒,非常优美。而后我写了一遍文章分析了ants
的源码,见ants
源码赏析。在写介绍ants
的文章和深入阅读源码过程中,网上的资料提及 Go 语言中 goroutine 池的实现,时常会带上tunny
这个库。于是,我又去研究了tunny
的源码,产出一篇文章Go 每日一库之 tunny。
在阅读tunny
源码时,我发现有个方法的实现有些问题。我也在Go 每日一库之 tunny中也指出了:
原理
我们知道 slice 结构中有一个指向数组的指针。假设一开始tunny
中有 5 个 worker,示意图如下: