共享內存我不知道什麼是最下邊這個名言地解釋:說明:不要通過共享內存進行通信;通過交流
不要通過共享內存通信;通過通信共享內存。 (R.派克)
在The Go Memory Model我可以讀取該:
A中的信道上發送的之前發生相應的接收從該信道完成。 (Golang Spec)
還有一個專門的golang article解釋報價。關鍵的貢獻是一個working example也由安德魯G.
那麼。有時候,太多的交談圍繞....我從內存規格報價得出,也看在工作實例如下:
後goroutine1通過通道,那麼所有的修改發送(任何)到goroutine2 (在內存中的任何位置)通過goroutine1完成後,必須通過同一通道接收後才能看到goroutine2。 (Golang引理由我:)
Therfore我得出下到名言地解釋:
要同步兩個夠程之間的內存訪問,你並不需要通過送內存渠道。足夠好的是從渠道接收(甚至沒有)。您將看到goroutine在發送時(發送到頻道)寫入(任何地方)的任何更改。 (當然,假設沒有其它夠程被寫入相同的內存。)更新(2)2017年8月26日
我有實際上是兩個問題:
1)我的結論正確?
2)我的解釋有幫助嗎?
更新(1) 我假定無緩衝通道。讓我們首先限制自己,避免以太多未知數來徹底改變自己。
請,我們還集中在兩個夠程通信的單信道及相關的記憶效應,而不是最佳做法的一個簡單的用例 - 這超出了這個問題的範圍。
爲了更好地理解我的問題的範圍,假設goroutines可以訪問任何類型的內存結構 - 不僅僅是原始內存結構 - 它可以是一個很大的內存結構,它可以是字符串,映射,數組等等。
TODO寫測試 – honzajde