goroutine的调度是出现在什么情况下,调度时做了什么
参考解析
题目来源:京东
答案:
Go调度器会在以下三种情况对goroutine进行调度:
goroutine执行某个操作因条件不满足需要等待而发生的调度。
goroutine主动调用Gosched()让出CPU而发生的调度。
goroutine运行时间太长或长时间处于系统调用中,被调度器剥夺运行权而发生的调度。
调度器一般做以下事:
- 协程调度。因为系统内核不能再决定协程的切换,那么协程的切换时间点则是由程序内部的调度器决定的。
- 垃圾回收。垃圾回收的必要条件是内存位于一致状态,这就需要暂停所有的线程,如果交给系统去做,那么会暂停所有的线程使其一致。程序自身的调度器知道什么时候内存位于一致状态,那么就没有必要暂停所有运行的协程。