在go语言中,goroutine是一种轻量级的协程。
goroutine的基础调度机制是,创建新的goroutine之后加入到队列中,当存在线程空闲时,就会从队列中取出来goroutine进行执行。
但是如果仅仅简单使用这种模式,会造成某个goroutine长时间占用CPU资源的情况,所以goroutine的调度机制是抢占式的,pre-emption机制就是在goroutine执行过程中周期性地检查当前是否需要进行抢占。如果发现某个goroutine运行一段挺长时间还没让出CPU资源,那么就会触发抢占操作。
需要注意的是,pre-emption机制是在Go语言1.14版本之后才默认开启的