理解goroutine

在示例中runtime.Gosched前后各加一条输出果然看得就比较清楚了:

1、启goroutine

2、主线程继续执行say(“hello”)

3、主线程输出 ~~hello

4、主线程遇到runtime.Goshed,切换CPU去执行goroutine——say(“world”)

5、输出 ~~world

6、goroutine遇到runtime.Goshed,切换CPU去执行主线程

7、主线程继续向下执行输出 hello,及2~~hello

8、主线程第一次for循环结束,将i++,并输出 ~~hello

9、主线程遇到runtime.Goshed,切换CPU去执行goroutine

10、输出 world及2~~world,第一次for循环结束,输出~~world

11、goroutine再次遇到runtime.Goshed,切换CPU去执行主线程

12、主线程输出hello及2~~hello,将i++已经>2,主线程结束循环退出

最终输出内容为:

~~ hello
~~ world
hello
2~~ hello
~~ hello
world
2~~ world
~~ world
hello
2~~ hello

理解goroutine》上有5条评论

  1. langzi

    我似懂非懂啊,虽然我能接受,但是我不能理解为什么后面那次输出不执行了

发表评论

电子邮件地址不会被公开。 必填项已用*标注