写在前面
微信公众号:[double12gzh]
关注容器技术、关注
Kubernetes
。问题或建议,请公众号留言。本文基于GoLang 1.13
在Go中创建goroutine很容易,也很快速。然而,Go最多只能在每个内核上同时运行一个,并且需要一种方法来存放其他goroutine,并确保负载在各处理器上得到很好的平衡。
Goroutine队列
Go通过本地队列
和全局队列
在两个层面管理处于等待状态的goroutine。局部队列
与每个处理器相连,而全局队列
是唯一的,可以被所有处理器使用。
每个本地队列的最大容量为256个,之后任何新进入的goroutine都会被推送到全局队列中。下面这个例子中的程序,可以产生成千上万的goroutine。
package main
import (
"runtime"
"sync"
)
const COUNT = 3000
func main() {
runtime.GOMAXPROCS(2)
var wg sync.WaitGroup
wg.Add(COUNT)
for i := 0; i < COUNT; i++