goroutine如何共享CPU资源?

时间:2019-01-06 14:32:34

标签: go

假设我启动的goroutine超过了我CPU中的内核。他们如何共享CPU资源?他们会跑步一定时间,然后睡一会吗?它们是否会在受CPU约束的情况下运行直到退出,从而允许CPU匮乏的goroutine运行?

1 个答案:

答案 0 :(得分:4)

Go调度程序处理goroutine之间的CPU资源共享。

我认为它当前是一个协作式调度程序,这意味着您的代码需要通过进行系统调用/函数调用或使用原子,互斥或通道等同步原语,使调度程序有机会上下文切换到其他goroutine。操作。

如果您只是在goroutine中运行紧密循环而没有上述任何操作,它将使其他goroutine以及Go调度程序和垃圾收集器都饿死,因此请注意。

似乎可能对Go1.12计划了一些抢占式调度技术,请参见此处:

https://github.com/golang/go/issues/24543

进一步了解Go计划程序:

https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part2.html

Goroutines are cooperatively scheduled. Does that mean that goroutines that don't yield execution will cause goroutines to run one by one?