第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

go使用共享內(nèi)存還是分布式計算

go使用共享內(nèi)存還是分布式計算

Go
慕慕森 2021-05-20 16:18:02
Go的標(biāo)語是“不要通過共享內(nèi)存進行通信;而是通過通信來共享內(nèi)存”。我想知道Go是使用共享內(nèi)存還是分布式計算方法。例如,對于MPI來說,它顯然是分布式的,而OpenMP則是顯然是共享內(nèi)存的;但是我不確定Go的獨特性。我已經(jīng)看到很多帖子,例如Shared memory vs. Go頻道通信,有效的Go文檔等,但無法澄清。提前致謝。
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經(jīng)驗 獲得超3個贊

Go不會阻止您在goroutine /線程之間共享內(nèi)存。它們的含義是,您通過通道發(fā)送數(shù)據(jù)塊或指向該數(shù)據(jù)塊的指針。這有效地將數(shù)據(jù)的“所有權(quán)”轉(zhuǎn)移到通道的目標(biāo)讀取器。請注意,所有權(quán)的轉(zhuǎn)移不是由語言或運行時強制執(zhí)行的,只是按照慣例。


如果您愿意的話,您仍然可以從兩個goroutine寫入同一內(nèi)存。換句話說:Go并不能阻止您用腳射擊自己,它只是提供了使這些錯誤更易于發(fā)現(xiàn)的語言語義。


如果將值傳遞給通道,則程序員必須假定該值不再是他在同一goroutine中要寫入的值。


func F(c chan *T) {

    // Create/load some data.

    data := getSomeData()


    // Send data into the channel.

    c <- data


    // 'data' should now be considered out-of-bounds for the remainder of

    // this function. This is purely by convention, and is not enforced

    // anywhere. For example, the following is still valid Go code, but will

    // lead to problems.

    data.Field = 123

}


查看完整回答
反對 回復(fù) 2021-05-24
?
呼啦一陣風(fēng)

TA貢獻1802條經(jīng)驗 獲得超6個贊

該問題假定共享內(nèi)存和分布式計算是相反的。有點像在問:RAM和LAN是否相反?區(qū)分CPU /內(nèi)存節(jié)點內(nèi)的共享內(nèi)存并發(fā)與CPU /內(nèi)存節(jié)點之間的共享內(nèi)存并發(fā)會更加清晰。

這是并行處理研究的整體內(nèi)容的一部分。有許多研究項目,包括:

  • 開發(fā)具有多個CPU共享一個內(nèi)存的非馮諾依曼計算機,并通過某種形式的交換結(jié)構(gòu)(通常是Clos網(wǎng)絡(luò))將其連接起來。OpenMP非常適合這些。

  • 開發(fā)由一組CPU組成的并行計算機,每個CPU都有自己的獨立內(nèi)存,并在節(jié)點之間具有一些通信結(jié)構(gòu)。通常,這是MPI的所在地。

第一種情況專門針對高性能計算博愛。我們大多數(shù)人都熟悉后一種情況。在這種情況下,通常這些天來的通信只是通過以太網(wǎng)進行的,但是(某些情況下)已經(jīng)成功地開發(fā)了各種更快的低延遲替代方案(例如,從Transputer串行鏈路出現(xiàn)的IEEE1355 SpaceWire)。

多年來,主要觀點是,只有共享內(nèi)存才能實現(xiàn)有效的并行性,因為(天真)認為傳遞消息的通信成本是過高的。對于共享內(nèi)存并發(fā),困難在于軟件:因為一切都是相互依賴的,所以隨著系統(tǒng)的變大,并發(fā)的組合設(shè)計將變得越來越困難。需要核心專業(yè)知識。

對于我們其他人,Go跟隨Erlang,Limbo,當(dāng)然還有Occam來促進消息傳遞,以作為編排要完成的工作的手段。這源于通信順序過程的代數(shù),它為創(chuàng)建任何規(guī)模的并行系統(tǒng)提供了基礎(chǔ)。CSP設(shè)計是可組合的:每個子系統(tǒng)本身都可以是更大系統(tǒng)的組成部分,而沒有理論上的限制。

您的問題涉及OpenMP(共享內(nèi)存)和MPI(分布式內(nèi)存消息傳遞),它們可以一起使用。Go可以被認為與MPI等效,因為它可以促進消息傳遞。但是,它也允許鎖和共享內(nèi)存。Go與MPI和OpenMP都不同,因為它與多處理器系統(tǒng)沒有明確的關(guān)系。為了進入使用Go進行并行處理的世界,需要一個網(wǎng)絡(luò)消息傳遞框架,例如OpenCL,有人正在為此使用Go API。


查看完整回答
反對 回復(fù) 2021-05-24
  • 2 回答
  • 0 關(guān)注
  • 321 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號