为什么Go使用通道在goroutine之间发送和接收数据而不是使用普通变量?

除了维基百科https://en.wikipedia.org/wiki/Channel_(programming) 的解释之外,我找不到关于这个问题的任何信息。但我对解释不满意。

渠道解决什么问题?为什么我们不直接使用普通变量来发送和接收数据呢?

回答

例如,如果您所说的“普通变量”是指多个 goroutine 写入和读取的切片,那么这是获得数据竞争的保证方式(您不想获得数据竞争)。您可以通过使用某种同步(例如 Mutex 或 RWLock)来避免并发访问。

此时,你

  1. 重新发明的通道(基本上就是互斥锁下的一个切片)
  2. 花费的时间比您需要的要多,但您的解决方案仍然较差(没有语法支持,您不能在 中使用切片select等)

以上是为什么Go使用通道在goroutine之间发送和接收数据而不是使用普通变量?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>