采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
为什么这里再开一个goroutine发送done就不会卡主呢?
因为开一个goroutine,这里的go语句开完goroutine后会立刻返回,运行下一句语句。那么在goroutine里面发送done的时候会卡住,但是是卡在我们新开的goroutine里面,而不是main(go语言的main函数也运行在goroutine里面)里面。
当我们又运行到这里,我们会再开第二个goroutine,同样也是发送done。这样大家都不卡住。当然,代价是如果接收方慢的话会goroutine越开越多。
那没有time.Sleep(time.Microsecond)在main中,main不会执行完了退出呢
老师,你好。这个问题我的理解是这样,麻烦你帮我看下这样理解对不对:主协程中两个循环中发送完小写和大写字符时,此时回写done标志的协程一共有20个,卡住的协程是这20个协程(小写字符的10个回写协程往chan里送的数据还没有读走,大写字符的10个回写协程又往这个chan里送数据,导致这20个回写协程都卡住了),主协程和分两次开出来(每次10个)的打印字符的协程不会卡住。卡住的20个回写状态的协程在主协程读取状态的for循环结束执行结束后结束。
你说的很对!
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.7k 14
691 1
2.0k 1
1.1k 12