老师好, 这里有一个顺序的问题想请教下,为啥先go worker(),再去发数据给chan?
来源:11-1 channel

尼克2018
2021-01-09
按照正常理解顺序,不应该是先发数据的代码放前面,再go worker()去收数据吗?
写回答
3回答
-
必须先go worker()。
发送数据是一个阻塞的动作。如果先发数据,在发送的时候就阻塞了,程序卡在发送这一行无法往下走,导致后面的go worker()无法执行。同学可以试一下,系统很有可能会报deadlock的错误。即使不报,也会卡住。
反之,go worker()之后,收数据的worker就等在那里,随后就可以顺利发送了。
30 -
慕仙908892
2021-06-01
你可以理由为chan必须要有接收者,才允许有发送者。你可以理解为GO怕你是个小白,写了发送不写接收。所以必须得先有接收者
20 -
chenjianyun
2021-05-22
应该是有缓存的channel先发送就可以,没有缓存的channel就必须要先接收后发送
10
相似问题
老师你好,goroutine的问题
回答 3
关于队列实现调度器问题
回答 1