查看从morsmachine.dk/go-scheduler
获取的这张众所周知的图像灰色列表是P的本地运行队列。如果此队列变空,它们将填充来自全局运行队列的go例程。
问题是,谁填补了P的本地队列?
调度程序,没有同步或每个 P 为自己(互斥)做?
P.S。该文章省略了这一信息。
答案 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.
。