Closed luckyxiaoqiang closed 4 years ago
// 释放未使用的 P,一般情况下不会执行这段代码 func (pp *p) destroy() { // 将所有 runnable Goroutine 移动至全局队列 for pp.runqhead != pp.runqtail { // 从本地队列中 pop pp.runqtail-- gp := pp.runq[pp.runqtail%uint32(len(pp.runq))].ptr() // push 到全局队列中 globrunqputhead(gp) } if pp.runnext != 0 { globrunqputhead(pp.runnext.ptr()) pp.runnext = 0 } (...) // 将当前 P 的 G 复链转移到全局 gfpurge(pp) (...) pp.status = _Pdead }
// 释放未使用的 P,一般情况下不会执行这段代码 func (pp *p) destroy() { // 将所有 runnable Goroutine 移动至全局队列 for pp.runqhead != pp.runqtail { // 从本地队列中 pop pp.runqtail-- gp := pp.runq[pp.runqtail%uint32(len(pp.runq))].ptr() // push 到全局队列中 globrunqputhead(gp) } if pp.runnext != 0 { globrunqputhead(pp.runnext.ptr()) pp.runnext = 0 } (...) // 将当前 P 的空闲的 G 复链转移到全局 gfpurge(pp) (...) pp.status = _Pdead }
实际描述
预期描述