考虑一下这种情况。有一家主要的goroutine和十家子公司。他们都可以访问channel。主通道向该信道发送1000号码,子通道将从中读取。是否有任何保证,每个附属戈鲁丁将准确读取100个数字,或者这个数额可能会变化,就像一些戈鲁丁将读取99个数字和另一个101个?
发布于 2017-11-23 13:44:39
不,没有保证,因为它取决于每个goroutine的运行时,这取决于在CPU中分布得有多好。
发布于 2017-11-24 05:45:54
通过一个未缓冲的通道来调度goroutine,那么有趣的是,这个通道纯粹是一种阻塞机制--因为这个值永远不会被“发送到”通道中,而且实际上什么也不会从它中读取。
一个没有缓冲的通道纯粹是一种同步机制:对于在通道上发送的goroutine来说,它的工作方式更接近于“睡眠直到某个goroutine准备接收”,而对于接收的goroutine则是“在某个goroutine准备发送之前睡觉”。
这应该清楚地表明,发送和接收没有内置任何公平或分配系统--它们纯粹是先到先得的,或者根据调度程序当前的负载可能更加武断。
https://stackoverflow.com/questions/47456922
复制相似问题