Go Scheduler填补P的本地队列?

时间:2015-09-24 16:11:29

标签: go scheduler

查看从morsmachine.dk/go-scheduler

获取的这张众所周知的图像

enter image description here

灰色列表是P的本地运行队列。如果此队列变空,它们将填充来自全局运行队列的go例程。

问题是,谁填补了P的本地队列

调度程序,没有同步或每个 P 为自己(互斥)做?

P.S。该文章省略了这一信息。

1 个答案:

答案 0 :(得分:4)

所有这些都来自src/runtime/proc1.go

功能#include<stdio.h> int prime(int); void main() { int n, count, a; printf("enter the number\n"); scanf("%d", &n); prime(n); if (count == 2) printf("prime"); else printf("not prime"); } int prime(int n) { int i, count = 0; for (i = 1; i <= n; i++) { if (n % i == 0) { count++; } return (count); } } (调度程序)调用schedule,试图从另一个findrunnable窃取G。如果失败,它将从全局运行队列返回P。然后在&#34;当前&#34;上执行G G

此外,M偶尔检查全局运行队列&#34;公平&#34;:

schedule

在所有这些中,只涉及一个锁,即// Check the global runnable queue once in a while to ensure fairness. // Otherwise two goroutines can completely occupy the local runqueue // by constantly respawning each other.