通过渠道进行通信

时间:2017-11-23 13:40:40

标签: go channel goroutine

考虑这种情况。有一个主要goroutine和十个子公司 够程。所有人都可以访问channel。主要人员向此频道发送1000个号码,而子号码将从中读取。 是否有任何保证,每个子公司goroutine将准确读取100个数字或这个数量可能会有所不同像一些goroutine将读取99个数字和另一个101?

2 个答案:

答案 0 :(得分:2)

不,不能保证,因为它取决于每个goroutine的运行时间,这取决于goroutine在CPU中的分布情况。

答案 1 :(得分:1)

通过无缓冲通道进行goroutine调度,有趣的是要注意的是通道纯粹用作阻塞机制 - 因为值永远不会被发送到通道"实际上并没有"从"它。

无缓冲通道纯粹作为一种同步机制起作用:对于在通道上发送的goroutine,它更多地沿着"睡眠直到某些goroutine准备好接收"并且为了接收goroutine它会睡觉,直到某些goroutine准备发送"。

这应该清楚地说明发送和接收没有内置的公平性或分配系统 - 它们纯粹是先到先得,或者甚至可能更加随意,这取决于调度程序的当前负载。