go 协程的实现笔记
看到有一篇写得很清楚的博客,做个笔记。 原文在此:Golang源码探索(二) 协程的实现原理 有时候G需要调用一些无法避免阻塞的原生代码, 这时M会释放持有的P并进入阻塞状态, 其他M会取得这个P并继续运行队列中的G. 因为同一时间只有一个线程(M)可以拥有P, P中的数据都是锁自由(lock free)的, 读写这些数据的效率会非常的高. 自旋中(spinning)这个状态非常重要, 是否需要唤醒或者创建新的M取决于当前自旋中的M的数量. 本地运行队列有数量限制, 当数量达到256个时会入队到...阅读全文