Go里面一个协程能保证绑定在一个内核线程上面的。

参考解析

题目来源:腾讯

答案:

协程是用户级的线程,对内核是透明的,系统并不知道协程的存在,并且协程是非抢占式调度,无法实现公平的任务调用,通常只进行协作式调度,需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。
Go Scheduler会把goroutine调度到逻辑处理器上运行,逻辑处理器会一对一的绑定到操作系统的线程。当goroutine可以运行时,会被放入一个逻辑处理器的待执行队列中;当goroutine遇到长时间执行或执行了一个阻塞的系统调用时(如打开文件),Go Scheduler会将这个逻辑处理器与线程分离,并将另一个线程绑定到这个逻辑处理器,之后从待执行队列中选择下一个goroutine来运行,原来的goroutine保存到待执行队列等待调用(逻辑处理器是不动的)。