一文搞懂併發和並行

2021-09-14 03:01:06 字數 946 閱讀 6380

併發和並行是兩個非常容易混淆的概念。它們都可以表示兩個或多個任務一起執行,但是偏重點有點不同。併發偏重於多個任務交替執行,而多個任務之間有可能還是序列的。併發是邏輯上的同時發生(simultaneous),而並行是物理上的同時發生。然而並行的偏重點在於」同時執行」。

並行(parallel):指在同一時刻,有多條指令在多個處理器上同時執行。就好像兩個人各拿一把鐵杴在挖坑,一小時後,每人乙個大坑。所以無論從微觀還是從巨集觀來看,二者都是一起執行的。

併發(concurrency):指在同一時刻只能有一條指令執行,但多個程序指令被快速的輪換執行,使得在巨集觀上具有多個程序同時執行的效果,但在微觀上並不是同時執行的,只是把時間分成若干段,使多個程序快速交替的執行。這就好像兩個人用同一把鐵杴,輪流挖坑,一小時後,兩個人各挖乙個小一點的坑,要想挖兩個大一點得坑,一定會用兩個小時。

嚴格意義上來說,並行的多個任務是真實的同時執行,而對於併發來說,這個過程只是交替的,一會執行任務一,一會兒又執行任務二,系統會不停地在兩者間切換。但對於外部觀察者來說,即使多個任務是序列併發的,也會造成是多個任務並行執行的錯覺。

實際上,如果系統內只有乙個cpu,而現在而使用多執行緒或者多執行緒任務,那麼真實環境中這些任務不可能真實並行的,畢竟乙個cpu一次只能執行一條指令,這種情況下多執行緒或者多執行緒任務就是併發的,而不是並行,作業系統會不停的切換任務。真正的併發也只能夠出現在擁有多個cpu的系統中(多核cpu)。

併發的動機:在計算能力恆定的情況下處理更多的任務, 就像我們的大腦, 計算能力相對恆定, 要在一天中處理更多的問題, 我們就必須具備多工的能力. 現實工作中有很多事情可能會中斷你的當前任務, 處理這種多工的能力就是你的併發能力。

一文讀懂併發與並行

翻譯 潘深練的個人 如您有更好的翻譯版本,歡迎 提交 issue 或投稿哦 更新 2022 02 23 併發性和並行性通常用於與多執行緒程式相關的,最早併發性和並行性似乎指的是相同的概念,但其實併發和並行實際上有不同的含義。在這個併發與並行教程中,我將解釋這些概念的含義。為了清楚起見,在本文中,我討...

一文搞懂transform skew

目錄 如何理解斜切 skew,先看乙個 demo。在下面的 demo 中,有 4 個正方形,分別是 紅色 不做 skew 變換,綠色 x 方向變換,藍色 y 方向變換,黑色 兩個方向都變換,拖動下面的滑塊可以檢視改變 skew 角度後的效果。切換 selector 可以設定 transform or...

一文搞懂property函式

接下來我帶大家了解乙個函式的作用以及使用技巧,希望對大家都有幫助,話不多說,接下來就開始我的表演特性 首先property有兩種用法,一種是作為函式的用法,一種是作為裝飾器的用法,接下來我們就逐一分析 property函式 看一下作為函式它包含的引數都有哪些 property fget none,f...