Go1.14带来了哪3个涉及本堂课程的主要变化?

来源:1-4 Go 程序是怎么跑起来的

Go666

2021-05-18 15:50:06

Go1.14带来了哪3个涉及本堂课程的主要变化?

1. time.Sleep()不再另起Goroutine,而是在当前P下安全调度,无需发生M/P的切换

2. 支持基于信号的异步抢占式调度

3. 增加runnext,最后启动的Goroutine最先执行 (?)

问题:

1. 是不是以上三项?查阅了一些资料,前两项有说明,第三项存疑。

2. 课件中“一个无聊的输出顺序问题”,1.14及以后,是不是应该这样解释?

左图,Channel阻塞,抢占P,开始执行runnext,优先输出9,后0-8,所有线程hang住,程序异常退出。

右图,time.Sleep()不再另起Goroutine,那运行时应该:抢占P,开始执行runnext,优先输出9,后0-8,后超时,平滑退出。


写回答

1回答

Xargin

2021-05-18

1-3 里,前两项没问题,第三项不对,runnext 一直都有,不是 1.14 加的


你说的结果也没问题~

0
hargin
回复
ho666
hp>我印象中 1.14 涉及调度的变化就是信号式抢占和 timer 的变更

没第三点了吧~

h021-05-21
共2条回复

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程