登录
首页 >  Golang >  Go问答

如何让Go goroutine共享CPU资源?

来源:stackoverflow

时间:2024-03-11 11:51:27 233浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何让Go goroutine共享CPU资源?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

假设我启动的 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

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

今天关于《如何让Go goroutine共享CPU资源?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>