以下列出了goroutine
之间切换的主要的时间点:
(1)Channel
发送和接收操作(如果这些操作是阻塞的);
(2)执行go
语句,虽然不能保证新的goroutine
马上被调度执行;
(3)阻塞的系统调用,像文件操作,网络操作等等;
(4)停下来进入垃圾回收周期以后。
换句话讲,在goroutine
不能继续进行运算以后(需要更多数据,更多空间,等等),都会进行切换。
参考资料:
Performance without the event loop。
有疑问加站长微信联系(非本文作者)