[go]goroutine协程调度

m:n模型

Go runtime 会负责 goroutine 的生老病死,从创建到销毁整个生命周期,都一手包办。

Runtime 会在程序启动的时候,创建 M 个线程(CPU 执行调度的单位),

之后创建的 N 个 goroutine 都会依附在这 M 个线程上执行。这就是 M:N 模型:

在同一时刻,一个线程上只能跑一个 goroutine。

当 goroutine 发生阻塞(例如上篇文章提到的向一个 channel 发送数据,被阻塞)时,runtime 会把当前 goroutine 调度走,让其他 goroutine 来执行。

目的就是不让一个线程闲着,榨干 CPU 的每一滴油水。

猜你喜欢

转载自www.cnblogs.com/iiiiiher/p/12172251.html