Golang goroutine抢占时机
- 超时
当goroutine运行时间超过10ms,调度器会尝试抢占该goroutine,使其让出cpu资源。
- 触发系统调用
当goroutine执行系统调用时,调度器能够感知并切换goroutine. 系统调用包括:文件io,网络io,时间睡眠,内存管理,线程管理等,可以理解为goroutine发生阻塞的情况。 - 显式调用
程序员可以主动调用runtime.Gosched使goroutine主动让出cpu资源。
当goroutine运行时间超过10ms,调度器会尝试抢占该goroutine,使其让出cpu资源。
当goroutine执行系统调用时,调度器能够感知并切换goroutine.
系统调用包括:文件io,网络io,时间睡眠,内存管理,线程管理等,可以理解为goroutine发生阻塞的情况。
程序员可以主动调用runtime.Gosched使goroutine主动让出cpu资源。