亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Go 使用通道在 goroutine 之間發送和接收數據,而不是使用正態變量?

為什么 Go 使用通道在 goroutine 之間發送和接收數據,而不是使用正態變量?

Go
心有法竹 2022-09-12 21:18:26
除了維基百科 https://en.wikipedia.org/wiki/Channel_(編程)的解釋之外,我找不到有關這個問題的任何信息。但我對解釋不滿意。渠道解決了什么問題?我們為什么不直接使用普通變量來發送和接收數據呢?
查看完整描述

2 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

例如,如果“正常變量”是指多個 goroutine 寫入和讀取的切片,那么這是獲取數據競賽的有保證的方法(您不想獲得數據競賽)。您可以通過使用某種同步(如互斥或 RWLock)來避免并發訪問。

此時,您

  1. 重新發明的通道(基本上是互斥體下的切片)

  2. 花費的時間比您需要的時間多,但您的解決方案仍然較差(沒有語法支持,您無法在 中使用切片等)select


查看完整回答
反對 回復 2022-09-12
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

通道解決了并發讀寫的問題?;旧希乐挂粋€戈魯廷讀取變量而另一個戈魯廷寫入相同變量的情況。

此外,通道也可能具有緩沖區,因此您可以在鎖定之前寫入多個值。

當然,您不必使用頻道。還有其他方法可以在戈魯丁之間發送數據。例如,可以在從共享變量中賦值或讀取值時使用原子操作,或者在訪問互斥鎖時使用互斥鎖。


查看完整回答
反對 回復 2022-09-12
  • 2 回答
  • 0 關注
  • 89 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號