91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言并發與并行的區別是什么

發布時間:2021-12-13 15:14:33 來源:億速云 閱讀:132 作者:iii 欄目:云計算

本篇內容主要講解“ Go語言并發與并行的區別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ Go語言并發與并行的區別是什么”吧!

現在我們都說設計可并行、高并發的程序,而且我們很多時候會在潛意識里覺得自己對并行(Parallelism)和并發(Concurrency)的區別很清楚,但如果要明確的說出二者的區別,又感覺沒辦法給出一個非常清晰的描述。

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

舉個簡單的例子,華羅庚泡茶,必須有燒水、洗杯子、拿茶葉等步驟。現在我們想盡快做完這件事,也就是“一共要處理很多事情”,有很多方法可以實現并發,例如請多個人同時做,這就是并行。并行是實現并發的一種方式,但不是唯一的方式。我們一個人也可以實現并發,例如先燒水、然后不用等水燒開就去洗杯子,所以通過調整程序運行方式也可以實現并發。

如果你覺得以上的講解還是太抽象了,下面通過一個小故事來講解,故事原型來自 Go 語言創始人之一 Rob Pike 的一篇演講。

故事的開始有一個需求:有一群地鼠要把一堆廢棄的說明書用小推車推到火爐去燒毀。

剛開始只有一只地鼠,使用一輛推車,將書裝到車上,運輸到火爐旁,將書卸到火爐。完成任務必然需要比較長的時間。

Go語言并發與并行的區別是什么

此時如果再增加一只地鼠,那也沒什么用,因為一只地鼠在干活,另一只地鼠只能等待。(當然有人說兩只地鼠輪流使用一輛推車,這樣可以讓地鼠得到休息,這樣它們干活更快,也可以提高效率。)

Go語言并發與并行的區別是什么

再找一輛推車來,兩只地鼠分別使用各自的推車,將書裝到車上,運輸到火爐旁,將書卸到火爐。這樣會提高運輸效率,但它們會在裝書和卸書時進行排隊,降低了效率。

Go語言并發與并行的區別是什么

這樣雖然比之前快了,但還是有瓶頸的。因為書只有一堆,火爐也只有一個,所以我們還必須通過消息來協調兩只地鼠的行動。好吧,那我們再把書分成兩堆,再增加一個火爐。

Go語言并發與并行的區別是什么

這樣就比之前的效率高差不多一倍了。現在這個模型就是并發的,因為兩只地鼠可以獨立完成一件事了,這樣提高了運輸效率,而且在裝書和卸書時不會進行排隊,提高了裝卸的效率。但這個模型不一定是并行的,比如同一時刻可能只有一只地鼠在干活。

上面就是第一種并發模型,我們還可以設計更多的并發模型,繼續看漫畫。

這次找了 3 只地鼠,一只負責把書裝到車上,一只負責運輸,一只負責把書卸到火爐焚燒。每只地鼠做一個獨立的任務,當然三只地鼠之間需要使用一些諸如消息通信之類的手段進行協調。

Go語言并發與并行的區別是什么

裝書和燒書的兩只地鼠都很輕松,負責運輸的這只地鼠卻很累,系統出現了瓶頸。那我們再找一只地鼠來,專門負責運回空推車。

Go語言并發與并行的區別是什么

我們在一個已有的設計(指三個地鼠的那個設計)中添加一個并發的步驟(第四只地鼠)增強了系統的性能。這樣一來,兩只地鼠去搞運輸,如果協調的好,理論情況下工作效率將是一只地鼠的 4 倍。

總共有 4 個并發的步驟:

  1. 把書裝到車上;

  2. 把推車運到火爐旁;

  3. 把書卸到火爐里;

  4. 運回空推車。

可以再增加一個分組,將這個并發模型并行化。

Go語言并發與并行的區別是什么

下面我們再來看另外一種并發模型。負責運輸的地鼠抱怨說運輸路程太長,那我們就增加一個中轉站。

Go語言并發與并行的區別是什么

然后再增加一個分組,將這個并發模型并行化,兩個分組并行執行。

Go語言并發與并行的區別是什么

可以把上面的并發模型再改進一下。增加中轉站的同時,再增加兩只地鼠,一只負責將從書堆運過來的書卸到中轉站,另一只負責將書從中轉站裝到推車里,再讓后面的地鼠運輸到火爐旁。

Go語言并發與并行的區別是什么

然后再增加一個分組,將這個并發模型并行化。

Go語言并發與并行的區別是什么

到此,相信大家對“ Go語言并發與并行的區別是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥宁县| 得荣县| 南郑县| 井陉县| 剑河县| 江城| 屯昌县| 松滋市| 册亨县| 收藏| 凌海市| 文水县| 霸州市| 丹棱县| 荃湾区| 大足县| 长葛市| 准格尔旗| 寿阳县| 合作市| 泸州市| 多伦县| 离岛区| 宝山区| 疏附县| 沙河市| 前郭尔| 常德市| 顺平县| 鹤峰县| 晋城| 淅川县| 象州县| 安顺市| 大石桥市| 石楼县| 石景山区| 滦南县| 呼伦贝尔市| 安顺市| 龙胜|