goroutine的调度是出现在什么情况下,调度时做了什么

本文阅读 2 分钟
首页 golang 正文
题目来源:京东

答案:行飞子

Go调度器会在以下三种情况对goroutine进行调度:

  1. goroutine执行某个操作因条件不满足需要等待而发生的调度。
  2. goroutine主动调用Gosched()让出CPU而发生的调度。
  3. goroutine运行时间太长或长时间处于系统调用中,被调度器剥夺运行权而发生的调度。

调度器一般做以下事:

  • 协程调度。因为系统内核不能再决定协程的切换,那么协程的切换时间点则是由程序内部的调度器决定的。
  • 垃圾回收。垃圾回收的必要条件是内存位于一致状态,这就需要暂停所有的线程,如果交给系统去做,那么会暂停所有的线程使其一致。程序自身的调度器知道什么时候内存位于一致状态,那么就没有必要暂停所有运行的协程。
本文来自投稿,不代表本站立场,如若转载,请注明出处:
了解中间件吗?有什么好处?
« 上一篇 09-17
Go 高并发的特点
下一篇 » 09-17

发表评论

发表评论