Goroutine的调度时机有哪些?

Goroutine的调度时机有哪些?

Goroutine的调度时机

情形

说明

使用关键字go

go创建一个协程后,调度器会进行一次调度决策

垃圾回收

GC有自己一套协程并需要时间在M上运行,GC运行时会做很多调度决策,例如调度不涉及堆访问的 goroutine 来运行。因为GC不管栈上的内存,只会回收堆上的内存。

系统调用

协程进行系统调用时会阻塞 M,因此它会被调度走,同时一个新的协程会被调度进来

同步

atomic,mutex,channel 操作等会使协程阻塞,因此会被调度走,直至条件满足再回来

Reference

Last updated