溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

發(fā)布時(shí)間:2021-12-13 15:14:33 來(lái)源:億速云 閱讀:130 作者:iii 欄目:云計(jì)算

本篇內(nèi)容主要講解“ Go語(yǔ)言并發(fā)與并行的區(qū)別是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“ Go語(yǔ)言并發(fā)與并行的區(qū)別是什么”吧!

現(xiàn)在我們都說(shuō)設(shè)計(jì)可并行、高并發(fā)的程序,而且我們很多時(shí)候會(huì)在潛意識(shí)里覺(jué)得自己對(duì)并行(Parallelism)和并發(fā)(Concurrency)的區(qū)別很清楚,但如果要明確的說(shuō)出二者的區(qū)別,又感覺(jué)沒(méi)辦法給出一個(gè)非常清晰的描述。

那么什么是并發(fā)?什么又是并行呢?并行的概念比較簡(jiǎn)單,并行總是和執(zhí)行(executions)相關(guān),很多東西同時(shí)執(zhí)行就是并行;而并發(fā)則是通過(guò)一些方式組織你的程序,讓它可以分成多個(gè)模塊去獨(dú)立的執(zhí)行。并行必然是需要多核的,一個(gè)處理器是無(wú)法并行的;但并發(fā)和處理器并沒(méi)有什么必然聯(lián)系,在一個(gè)處理器上面,我們的程序也可以是并發(fā)的。

舉個(gè)簡(jiǎn)單的例子,華羅庚泡茶,必須有燒水、洗杯子、拿茶葉等步驟?,F(xiàn)在我們想盡快做完這件事,也就是“一共要處理很多事情”,有很多方法可以實(shí)現(xiàn)并發(fā),例如請(qǐng)多個(gè)人同時(shí)做,這就是并行。并行是實(shí)現(xiàn)并發(fā)的一種方式,但不是唯一的方式。我們一個(gè)人也可以實(shí)現(xiàn)并發(fā),例如先燒水、然后不用等水燒開(kāi)就去洗杯子,所以通過(guò)調(diào)整程序運(yùn)行方式也可以實(shí)現(xiàn)并發(fā)。

如果你覺(jué)得以上的講解還是太抽象了,下面通過(guò)一個(gè)小故事來(lái)講解,故事原型來(lái)自 Go 語(yǔ)言創(chuàng)始人之一 Rob Pike 的一篇演講。

故事的開(kāi)始有一個(gè)需求:有一群地鼠要把一堆廢棄的說(shuō)明書(shū)用小推車(chē)推到火爐去燒毀。

剛開(kāi)始只有一只地鼠,使用一輛推車(chē),將書(shū)裝到車(chē)上,運(yùn)輸?shù)交馉t旁,將書(shū)卸到火爐。完成任務(wù)必然需要比較長(zhǎng)的時(shí)間。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

此時(shí)如果再增加一只地鼠,那也沒(méi)什么用,因?yàn)橐恢坏厥笤诟苫?,另一只地鼠只能等待。(?dāng)然有人說(shuō)兩只地鼠輪流使用一輛推車(chē),這樣可以讓地鼠得到休息,這樣它們干活更快,也可以提高效率。)

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

再找一輛推車(chē)來(lái),兩只地鼠分別使用各自的推車(chē),將書(shū)裝到車(chē)上,運(yùn)輸?shù)交馉t旁,將書(shū)卸到火爐。這樣會(huì)提高運(yùn)輸效率,但它們會(huì)在裝書(shū)和卸書(shū)時(shí)進(jìn)行排隊(duì),降低了效率。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

這樣雖然比之前快了,但還是有瓶頸的。因?yàn)闀?shū)只有一堆,火爐也只有一個(gè),所以我們還必須通過(guò)消息來(lái)協(xié)調(diào)兩只地鼠的行動(dòng)。好吧,那我們?cè)侔褧?shū)分成兩堆,再增加一個(gè)火爐。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

這樣就比之前的效率高差不多一倍了?,F(xiàn)在這個(gè)模型就是并發(fā)的,因?yàn)閮芍坏厥罂梢元?dú)立完成一件事了,這樣提高了運(yùn)輸效率,而且在裝書(shū)和卸書(shū)時(shí)不會(huì)進(jìn)行排隊(duì),提高了裝卸的效率。但這個(gè)模型不一定是并行的,比如同一時(shí)刻可能只有一只地鼠在干活。

上面就是第一種并發(fā)模型,我們還可以設(shè)計(jì)更多的并發(fā)模型,繼續(xù)看漫畫(huà)。

這次找了 3 只地鼠,一只負(fù)責(zé)把書(shū)裝到車(chē)上,一只負(fù)責(zé)運(yùn)輸,一只負(fù)責(zé)把書(shū)卸到火爐焚燒。每只地鼠做一個(gè)獨(dú)立的任務(wù),當(dāng)然三只地鼠之間需要使用一些諸如消息通信之類的手段進(jìn)行協(xié)調(diào)。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

裝書(shū)和燒書(shū)的兩只地鼠都很輕松,負(fù)責(zé)運(yùn)輸?shù)倪@只地鼠卻很累,系統(tǒng)出現(xiàn)了瓶頸。那我們?cè)僬乙恢坏厥髞?lái),專門(mén)負(fù)責(zé)運(yùn)回空推車(chē)。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

我們?cè)谝粋€(gè)已有的設(shè)計(jì)(指三個(gè)地鼠的那個(gè)設(shè)計(jì))中添加一個(gè)并發(fā)的步驟(第四只地鼠)增強(qiáng)了系統(tǒng)的性能。這樣一來(lái),兩只地鼠去搞運(yùn)輸,如果協(xié)調(diào)的好,理論情況下工作效率將是一只地鼠的 4 倍。

總共有 4 個(gè)并發(fā)的步驟:

  1. 把書(shū)裝到車(chē)上;

  2. 把推車(chē)運(yùn)到火爐旁;

  3. 把書(shū)卸到火爐里;

  4. 運(yùn)回空推車(chē)。

可以再增加一個(gè)分組,將這個(gè)并發(fā)模型并行化。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

下面我們?cè)賮?lái)看另外一種并發(fā)模型。負(fù)責(zé)運(yùn)輸?shù)牡厥蟊г拐f(shuō)運(yùn)輸路程太長(zhǎng),那我們就增加一個(gè)中轉(zhuǎn)站。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

然后再增加一個(gè)分組,將這個(gè)并發(fā)模型并行化,兩個(gè)分組并行執(zhí)行。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

可以把上面的并發(fā)模型再改進(jìn)一下。增加中轉(zhuǎn)站的同時(shí),再增加兩只地鼠,一只負(fù)責(zé)將從書(shū)堆運(yùn)過(guò)來(lái)的書(shū)卸到中轉(zhuǎn)站,另一只負(fù)責(zé)將書(shū)從中轉(zhuǎn)站裝到推車(chē)?yán)?,再讓后面的地鼠運(yùn)輸?shù)交馉t旁。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

然后再增加一個(gè)分組,將這個(gè)并發(fā)模型并行化。

Go語(yǔ)言并發(fā)與并行的區(qū)別是什么

到此,相信大家對(duì)“ Go語(yǔ)言并發(fā)與并行的區(qū)別是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI