繁体   English   中英

goroutine如何共享CPU资源?

[英]how do go goroutines share CPU resources?

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

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

Goroutine是协作调度的。 这是否意味着不产生执行结果的goroutine将导致goroutine逐一运行?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM