Concurrency與Parallelism的不同之處

明明都是同時執行,差別在哪?

James Shieh
技術保鮮盒
4 min readMay 8, 2018

--

技術冷知識,用各種角度解釋Concurrency與Parallelism的不同之處。

圖解:

Concurrency
Parallelism

從中譯的角度解釋:

  • Concurrency:並發性
  • Parallelism:並行性

用早餐店的工作解釋:早餐店有A,B共二位員工以及三種類型的工作內容(1.烤土司、2.煎蛋與火腿、3.組合1~2做成火腿蛋土司)

  • Concurrency:A在烤土司的同時會去煎蛋和火腿,而B會隨時注意土司烤好沒,同時把A煎好的蛋與火腿,一起組合成火腿蛋土司。
  • Parallelism:A、B分別做自己的火腿蛋土司,不共享食材。

各挑一個實際的案例:

  • Concurrency:Multi-thread,多線程(多執行緒)程式會把一個工作拆分成數個子任務,並利用好幾個thread同時運行子任務。
  • Parallelism:Load balancing,負載平衡機制,例如為了把網站流量分散,我架設了多個相同內容的網頁伺服器,並將訪客平均分配到這些伺服器上。

以工作的分配情形解釋:

  • Concurrency:相同的工作集合,一起完成同一份工作,互相合作,做團稽
  • Parallelism:不同的工作集合,各自完成自己的工作,不互相干擾,有各自的考績

以感情關係解釋:

  • Concurrency:2017年,你和兩個女孩交往,腳踏兩條船,為了同時維繫多個感情關係,必須時常在不同的感情中切換
  • Parallelism:2017年,你和兩個女孩交往,你很專情但最後都分手了,而一段在夏天、另一段在冬天。

以Node.js解釋:

伺服器服務時常卡在I/O存取(檔案上傳、檔案存取),如果等待I/O的時間過長,伺服器就無法服務其他請求,因此Node.js利用事件驅動,非堵塞I/O模型實踐了良好的共發性:使用者在上傳檔案時,不用等到上傳完成,中間可以去做其他事情,例如臨時決定又要再上傳另一個檔案,或填寫表格中的其他欄位。但由於Node.js仍然本質上屬於單線程,我們可以透過ngnix這種負載平衡工具,實現並行性,也就是利用水平擴展的方式,提高服務品質。

以下文章也可以參考看看唷:

我是James,一位自由接案工作者對於軟體開發與接案工作充滿熱忱,截至2018年,不知不覺已經累積11年的時間在這個領域打轉,擁有6年的接案經驗。 寫作是我一個新的嘗試,初衷是希望能讓這個環境變得更好,從三個面向出發:1.個人:強化團隊成員的生產力與技術力,提供技術觀點與教學、工作方法等硬實力。
2.組織:培養良好的團隊合作態度與企業文化、分享合作與溝通技巧。
3.社會:讓客戶、發包單位知道如何有效處理系統外包,把資源花在刀口上,並透過接案經驗分享促進良好的合作。
FB粉絲頁艾菲肯先生——您最佳的技術夥伴
個人刊物 艾菲肯先生的咖啡時間
工作室網站
Efacani.com

--

--

James Shieh
技術保鮮盒

Find something more important than you are and dedicate your life to it.