並發與並行的區別

2021-03-01 網際網路後端架構

原文連結:https://www.bughui.com/2017/08/23/difference-between-concurrency-and-parallelism/

很多年前,上作業系統課的時候,老師告訴我們「並行是指同一時刻同時做多件事情,而並發是指同一時間間隔內做多件事情」。這裡的差別初看確實簡單明了,不過較真的我表示不同意。老師們說的話,貌似並不嚴謹。時刻是指時間軸上的一個點,一個瞬間,這是個不可再分的量。如果在時間這個維度上沒有增量,何來「做事」一說!也就是說,老師們口中的「時刻」與時間間隔(時間段)其實是等價的。那老師們說的那個「區別」有什麼區別嗎?多年過去,今天偶然又討論起這個話題。。。
正是因為當初老師給同學們灌輸了這種模稜兩可的概念,所以每次提起這個話題的時候,總是免不了要有一番口水仗。關於這個問題,我在不同的場合與不同的小夥伴爭論過無數次了,厭煩了。所以,今天我想把我自己理解的概念寫下來,終結關於這個話題的爭論。

首先,我們來看看前輩的看法:

Concurrency is when two tasks can start, run, and complete in overlapping time periods. Parallelism is when tasks literally run at the same time, eg. on a multi-core processor.
Concurrency is the composition of independently executing processes, while parallelism is the simultaneous execution of (possibly related) computations.
Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.
An application can be concurrent – but not parallel, which means that it processes more than one task at the same time, but no two tasks are executing at same time instant.
An application can be parallel – but not concurrent, which means that it processes multiple sub-tasks of a task in multi-core CPU at same time.
An application can be neither parallel – nor concurrent, which means that it processes all tasks one at a time, sequentially.
An application can be both parallel – and concurrent, which means that it processes multiple tasks concurrently in multi-core CPU at same time.
Vipin Jain. Differences between concurrency vs. parallelism

翻譯成中文:

並發是兩個任務可以在重疊的時間段內啟動,運行和完成。並行是任務在同一時間運行,例如,在多核處理器上。
並發是獨立執行過程的組合,而並行是同時執行(可能相關的)計算。
並發是一次處理很多事情,並行是同時做很多事情。
應用程式可以是並發的,但不是並行的,這意味著它可以同時處理多個任務,但是沒有兩個任務在同一時刻執行。
應用程式可以是並行的,但不是並發的,這意味著它同時處理多核CPU中的任務的多個子任務。
一個應用程式可以即不是並行的,也不是並發的,這意味著它一次一個地處理所有任務。
應用程式可以即是並行的也是並發的,這意味著它同時在多核CPU中同時處理多個任務。

看完前輩的話有何感想呢?好像理解了些什麼是不?o(∩_∩)o 哈哈!這個翻譯可能稍微有那麼一些彆扭,因為這位前輩的話也是比較隨意的。在stackoverflow發言,比較的口語化。
雖然他的話略羅嗦,不夠精煉,但是已經比較全面的闡述了這兩個概念的區別了。

我再來用我自己的話分析一下:
並行才是我們通常認為的那個同時做多件事情,而並發則是在線程這個模型下產生的概念。並發表示同時發生了多件事情,通過時間片切換,哪怕只有單一的核心,也可以實現「同時做多件事情」這個效果。根據底層是否有多處理器,並發與並行是可以等效的,這並不是兩個互斥的概念。舉個我們開發中會遇到的例子,我們說資源請求並發數達到了1萬。這裡的意思是有1萬個請求同時過來了。但是這裡很明顯不可能真正的同時去處理這1萬個請求的吧!如果這臺機器的處理器有4個核心,不考慮超線程,那麼我們認為同時會有4個線程在跑。也就是說,並發訪問數是1萬,而底層真實的並行處理的請求數是4。如果並發數小一些只有4的話,又或者你的機器牛逼有1萬個核心,那並發在這裡和並行一個效果。也就是說,並發可以是虛擬的同時執行,也可以是真的同時執行。而並行的意思是真的同時執行。結論是:並行是我們物理時空觀下的同時執行,而並發則是作業系統用線程這個模型抽象之後站在線程的視角上看到的「同時」執行。

再回過頭去看看老師們的那句話,似乎也並沒有什麼不對的,只是不夠嚴謹,容易被誤導。這個問題,如果路過的同學沒有意見的話,就到此為止了。沒問題的話,以後,我就不再參與關於這個話題的爭論了。(ーー゛)

以上就是我對並發與並行的理解,如有偏差,歡迎指正。

相關焦點

  • 光纖並發通信的腦洞
    光纖並發通信的腦洞,天熱的難受,待在家裡閒的發悶,剪了一段廢舊的光纖,研究研究突然腦子裡有個靈感,通過光纖進行鏡像傳播數據的腦洞,因為自己文化水平實在有限,不懂其中的理論原理,但用雷射筆給光纖打光,發現兩端的影像竟然是一樣(表面一樣)的!
  • 猿友:你是否對並行編譯感興趣?
    所謂的並行編譯從Visual Studio 2019 v16.3開始,我們就一直在添加新的功能特性來優化並行編譯這個組件。因為這些特性目前還是處於實驗狀態,所以它們在默認情況下是關閉的。Clang/gcc依賴於編譯系統的並發模型,但是,不湊巧的是,MSBuild只能在項目級進行並發編譯。為了解決這個問題,我們創建了一項新的MSBuild任務,也就是所謂的Multi-ToolTask (MTT)。這項新任務不再使用MSBuild的批處理系統,並繞開了典型的單任務的限制。有了這個玩意,就可以以並行的方式來執行各個任務,同時還可以集成其他的未包含在MSBuild中的調度模塊。
  • EdgeBoard多並發高性能通用CNN架構剖析
    這樣可以使數據在運算單元的陣列中進行流動,減少訪存的次數,並且結構更加規整,布線更加統一,提高系統工作頻率,避免了採用加法樹等並行結構所造成的高扇出問題。因此,如上圖所示,我們可以分別從Feature Map和Kernel兩個維度去定義脈動陣列的並行結構。
  • 安卓版Chrome 64迎來並行下載功能
    IT之家12月11日消息 最近,谷歌向正式版通道的用戶推出了Chrome 63 for Android,並將Chrome 64納入其測試通道,據xda-developer.com一位用戶稱,Chorme 64 for Android裡新增了一個名為「並行下載」的功能,該功能啟用後,Chrome
  • 什麼是wifi6,與wifi2.4g,和wifi5g,有什麼區別
    隨著小米10的發布以及大量的全新高端路由的發布,使得wifi6的名詞進入人們的耳朵,同時隨著大量的新品設備的發布相信不久wifi6就會進入我們的生活那麼什麼是wifi6 呢和我們平時使用的路由又有什麼區別呢?
  • Java高級程式設計師須知的並發編程知識
    並發編程簡介並發編程式Java語言的重要特性之一,當然也是最難以掌握的內容。編寫可靠的並發程序是一項不小的挑戰。但是,作為程式設計師的我們,要變得更有價值,就需要啃一些硬骨頭了。因此,理解並發編程的基礎理論和編程實踐,讓自己變得更值錢吧。
  • RESTAPI與Spring框架下的並發控制
    您有沒有想過並發控制應該如何反映在我們的API中?當兩個用戶同時更新相同的記錄時會發生什麼?我們會發送錯誤信息嗎?我們將使用什麼HTTP響應代碼?我們將附加哪些HTTP頭?本文的目的是全面說明如何對RESTAPI建模,使其支持資源的並發控制,並利用HTTP協議的特性。我們還將在Spring框架的幫助下實現此解決方案。
  • 康寧:四通道並行光纖至兩芯(雙工)光學連接解決方案
    1/18/2017,來自康寧光通信技術部,本文將討論QFSP收發器和SFP收發器間的光傳輸鏈路(例如40GbE收發器和10GbE收發器間的光纖連接),即並行8芯光纖到2芯光纖鏈路。四通道並行光纖鏈路   並行光纖連結是通過結合兩個或兩個以上的通道來實現的。
  • 基於FPGA的並行掃頻DDS的實現
    因此,為了滿足電子幹擾系統更高(如400MHz系統時鐘)的要求,應該採用並行處理技術。1 並行DDS電路工作原理並行處理(Parallel Processing)是計算機系統中能同時執行兩個或更多個處理機的一種計算方法。處理機可同時工作於同一程序的不同方面。並行處理的主要目的是節省大型和複雜問題的解決時間。
  • 成人腦室內出血並發慢性腦積水的研究進展
    成人IVH的類型一般分為原發性和繼發性兩類,其中繼發性IVH佔到90%以上,50%IVH病人預後差與繼發腦積水有關。目前對於IVH並發慢性腦積水的機制尚不明確。本文結合國內外權威文獻,對慢性腦積水的發生機制及其預防進行綜述。
  • 應對萬億數據上億並發!字節跳動的圖資料庫研發實踐
    圖資料庫本質也是一個存儲系統,它和常見的 KV 存儲系統、MySQL 存儲系統的相比主要區別在於目標數據的邏輯關係不同和訪問模式不同,對於數據內在關係是圖模型以及在圖上遊走類和模式匹配類的查詢,比如社交關係查詢,圖資料庫會有更大的性能優勢和更加簡潔高效的接口。
  • 蒙古國的交通奇景,左駕和右駕並行上路?你意想不到的神邏輯
    正如同道路駕駛「左右並行」,在高速邁向現代化的蒙古社會中,也經常出現「左右並行」的狀況。例如:免繳學費的公立學校,卻優先讓「願意繳費」的學生入學;同一項業務,因政府承辦人不同,而衍生截然不同的辦理方法;今天還合規的稅務申報,到了明天就告訴你法規變動需要補稅。
  • 警務保障與疫情防控齊肩並行
    警務保障與疫情防控齊肩並行 2020-09-11 15:55 來源:澎湃新聞·澎湃號·政務
  • 【專家共識】妊娠合併結構異常性心臟病並發產後出血MDT管理專家...
    因此,對於合併心臟病產婦產後出血治療中,較非心臟病患者,宮縮劑使用更受限制,以至於產後出血控制難度增加,導致血流動力學進一步惡化。因此,在分娩前應組織多學科對心臟功能及產後出血的高危因素同時評估,產科醫生需與心血管內、外科、麻醉科及新生兒科醫生充分溝通,做好預處理、止血方法、藥物、器械使用的應急預案的準備。妊娠合併心臟病並發產後出血的診斷關鍵在於對出血量的正確估計及伴發持續大量產後出血的預判,不準確的出血量估測會增加後續處理的難度。對於妊娠合併心臟病的孕婦,在關注出血量的同時,更要密切關注血流動力學指標變化。
  • 基於FPGA流水線結構並行FFT的設計與實現
    2 結構說明2.1 流水線結構硬體結構實現FFT的常用形式有4種:遞歸結構,流水線結構,並行迭代結構和全並行結構。遞歸結構的運算的時間較長,並行迭代結構對數據存取帶寬要求很高,全並行結構資源消耗過大,均不適用。2.2 並行處理FFT作為時域和頻域轉換的基本運算,是數字頻譜分析的必要前提,超級的運算能力在雷達處理、觀測、跟蹤、定時定位處理、高速圖像處理、保密無線通訊和數字通信、濾波等的應用上極為強烈,而實時系統對FFT的運算速度要求更高。
  • Verigy 93000中直流參數的並行測試方法
    本論文闡述一種測試方法使得Verigy 93000 進行直流參數測試時獨立並行使用硬體資源,從而節省測試時間,提高測試效率。因此在測試中,只要PPMU 的參數範圍和精度滿足晶片需求,我們儘可能使用PPMU,並通過合適的編程方法做到硬體資源完全並行使用,加快測試速度。
  • 膿毒症並發彌散性血管內凝血診治急診專家共識發布_膿毒症_彌散性...
    膿毒症並發DIC的病死率達28%~43%。中華醫學會急診醫學分會、中華危重病急救醫學雜誌編輯委員會組織相關專家在參考相關指南與共識及近年發表的相關研究基礎上制定《膿毒症並發彌散性血管內凝血診治急診專家共識》。
  • 深度卷積神經網絡CNNs的多GPU並行框架及其應用
    6.CNNs網絡的模型並行工作引擎每個模型並行Worker上以一個模型並行執行引擎負責調度本Worker上子模型的執行過程。