本篇內(nèi)容主要講解“ Go語言并發(fā)與并行的區(qū)別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“ Go語言并發(fā)與并行的區(qū)別是什么”吧!
十余年的射洪網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整射洪建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“射洪網(wǎng)站設(shè)計”,“射洪網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實(shí)執(zhí)行。
現(xiàn)在我們都說設(shè)計可并行、高并發(fā)的程序,而且我們很多時候會在潛意識里覺得自己對并行(Parallelism)和并發(fā)(Concurrency)的區(qū)別很清楚,但如果要明確的說出二者的區(qū)別,又感覺沒辦法給出一個非常清晰的描述。
那么什么是并發(fā)?什么又是并行呢?并行的概念比較簡單,并行總是和執(zhí)行(executions)相關(guān),很多東西同時執(zhí)行就是并行;而并發(fā)則是通過一些方式組織你的程序,讓它可以分成多個模塊去獨(dú)立的執(zhí)行。并行必然是需要多核的,一個處理器是無法并行的;但并發(fā)和處理器并沒有什么必然聯(lián)系,在一個處理器上面,我們的程序也可以是并發(fā)的。
舉個簡單的例子,華羅庚泡茶,必須有燒水、洗杯子、拿茶葉等步驟?,F(xiàn)在我們想盡快做完這件事,也就是“一共要處理很多事情”,有很多方法可以實(shí)現(xiàn)并發(fā),例如請多個人同時做,這就是并行。并行是實(shí)現(xiàn)并發(fā)的一種方式,但不是唯一的方式。我們一個人也可以實(shí)現(xiàn)并發(fā),例如先燒水、然后不用等水燒開就去洗杯子,所以通過調(diào)整程序運(yùn)行方式也可以實(shí)現(xiàn)并發(fā)。
如果你覺得以上的講解還是太抽象了,下面通過一個小故事來講解,故事原型來自 Go 語言創(chuàng)始人之一 Rob Pike 的一篇演講。
故事的開始有一個需求:有一群地鼠要把一堆廢棄的說明書用小推車推到火爐去燒毀。
剛開始只有一只地鼠,使用一輛推車,將書裝到車上,運(yùn)輸?shù)交馉t旁,將書卸到火爐。完成任務(wù)必然需要比較長的時間。
此時如果再增加一只地鼠,那也沒什么用,因?yàn)橐恢坏厥笤诟苫?,另一只地鼠只能等待。(?dāng)然有人說兩只地鼠輪流使用一輛推車,這樣可以讓地鼠得到休息,這樣它們干活更快,也可以提高效率。)
再找一輛推車來,兩只地鼠分別使用各自的推車,將書裝到車上,運(yùn)輸?shù)交馉t旁,將書卸到火爐。這樣會提高運(yùn)輸效率,但它們會在裝書和卸書時進(jìn)行排隊,降低了效率。
這樣雖然比之前快了,但還是有瓶頸的。因?yàn)闀挥幸欢?,火爐也只有一個,所以我們還必須通過消息來協(xié)調(diào)兩只地鼠的行動。好吧,那我們再把書分成兩堆,再增加一個火爐。
這樣就比之前的效率高差不多一倍了?,F(xiàn)在這個模型就是并發(fā)的,因?yàn)閮芍坏厥罂梢元?dú)立完成一件事了,這樣提高了運(yùn)輸效率,而且在裝書和卸書時不會進(jìn)行排隊,提高了裝卸的效率。但這個模型不一定是并行的,比如同一時刻可能只有一只地鼠在干活。
上面就是第一種并發(fā)模型,我們還可以設(shè)計更多的并發(fā)模型,繼續(xù)看漫畫。
這次找了 3 只地鼠,一只負(fù)責(zé)把書裝到車上,一只負(fù)責(zé)運(yùn)輸,一只負(fù)責(zé)把書卸到火爐焚燒。每只地鼠做一個獨(dú)立的任務(wù),當(dāng)然三只地鼠之間需要使用一些諸如消息通信之類的手段進(jìn)行協(xié)調(diào)。
裝書和燒書的兩只地鼠都很輕松,負(fù)責(zé)運(yùn)輸?shù)倪@只地鼠卻很累,系統(tǒng)出現(xiàn)了瓶頸。那我們再找一只地鼠來,專門負(fù)責(zé)運(yùn)回空推車。
我們在一個已有的設(shè)計(指三個地鼠的那個設(shè)計)中添加一個并發(fā)的步驟(第四只地鼠)增強(qiáng)了系統(tǒng)的性能。這樣一來,兩只地鼠去搞運(yùn)輸,如果協(xié)調(diào)的好,理論情況下工作效率將是一只地鼠的 4 倍。
總共有 4 個并發(fā)的步驟:
把書裝到車上;
把推車運(yùn)到火爐旁;
把書卸到火爐里;
運(yùn)回空推車。
可以再增加一個分組,將這個并發(fā)模型并行化。
下面我們再來看另外一種并發(fā)模型。負(fù)責(zé)運(yùn)輸?shù)牡厥蟊г拐f運(yùn)輸路程太長,那我們就增加一個中轉(zhuǎn)站。
然后再增加一個分組,將這個并發(fā)模型并行化,兩個分組并行執(zhí)行。
可以把上面的并發(fā)模型再改進(jìn)一下。增加中轉(zhuǎn)站的同時,再增加兩只地鼠,一只負(fù)責(zé)將從書堆運(yùn)過來的書卸到中轉(zhuǎn)站,另一只負(fù)責(zé)將書從中轉(zhuǎn)站裝到推車?yán)?,再讓后面的地鼠運(yùn)輸?shù)交馉t旁。
然后再增加一個分組,將這個并發(fā)模型并行化。
到此,相信大家對“ Go語言并發(fā)與并行的區(qū)別是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!