多線程、並發、並行、同步、異步和互斥的解釋


1. 並發:在操作系統中,是指一個時間段中有幾個程序都處於已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行。其中兩種並發關系分別是同步和互斥
2. 互斥:進程間相互排斥的使用臨界資源的現象,就叫互斥。
3. 同步:進程之間的關系不是相互排斥臨界資源的關系,而是相互依賴的關系。進一步的說明:就是前一個進程的輸出作為后一個進程的輸入,當第一個進程沒有輸出時第二個進程必須等待。具有同步關系的一組並發進程相互發送的信息稱為消息或事件。
其中並發又有偽並發和真並發,偽並發是指單核處理器的並發,真並發是指多核處理器的並發。
4. 並行:在單處理器中多道程序設計系統中,進程被交替執行,表現出一種並發的外部特種;在多處理器系統中,進程不僅可以交替執行,而且可以重疊執行。在多處 理器上的程序才可實現並行處理。從而可知,並行是針對多處理器而言的。並行是同時發生的多個並發事件,具有並發的含義,但並發不一定並行,也亦是說並發事 件之間不一定要同一時刻發生。

5. 多線程:多線程是程序設計的邏輯層概念,它是進程中並發運行的一段代碼。多線程可以實現線程間的切換執行。

6. 異步:異步和同步是相對的,同步就是順序執行,執行完一個再執行下一個,需要等待、協調運行。異步就是彼此獨立,在等待某事件的過程中繼續做自己的事,不 需要等待這一事件完成后再工作。線程就是實現異步的一個方式。異步是讓調用方法的主線程不需要同步等待另一線程的完成,從而可以讓主線程干其它的事情。
   異步和多線程並不是一個同等關系,異步是最終目的,多線程只是我們實現異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回而可以做其它的事情。實現異步可以采用多線程技術或則交給另外的進程來處理。


為了對以上概念的更好理解舉一個簡單例子,  假設我要做 燒開水,舉杠鈴100下, 洗衣服 3件事情。

燒開水 這件事情,  我要做的事情為, 准備燒開水 1分鍾, 等開水燒開 8 分鍾 , 關掉燒水機 1分鍾
舉杠鈴100下        我要做的事情為,  舉杠鈴100下  10分鍾
洗衣服            我要做的事情為, 准備洗衣服 1分鍾, 等開水燒開 5 分鍾 , 關掉洗衣機 1分鍾

單核情況下
同步的完成,我需要做的時間為 1+ 8 +1 + 10 + 1+ 5 +1 = 27 分

如果異步,就是在等的時候,我可以切換去做別的事情

准備燒開水(1) + 准備洗衣服(1) + 舉50下杠鈴 (5)分鍾+ 關洗衣機 1分鍾 + 舉杠鈴20下 (2)分鍾+ 關燒水機 1分鍾 + 舉30下杠鈴(3)分鍾
1+1+5+1+2+1+3 =14 分鍾


雙核 異步 並行

核1  准備燒開水 1分鍾+ 舉杠鈴50下(5)分鍾+ 等待3分鍾 + 關掉燒水機 1分鍾

核2  准備洗衣服 1分鍾+ 舉杠鈴50下(5)分鍾+ 關掉洗衣機 1分鍾 + 等待3分鍾

其實只花了 1+5+3+1 = 10分鍾

其中還有雙核都等待了3分鍾

雙核 異步 非並行

核1  舉杠鈴100下(10)分鍾

核2  准備燒開水 1分鍾+ 准備洗衣服 1分鍾+ 等待5 分鍾+ + 關掉燒水機 1分鍾  + 等待 1 分鍾 + 關掉洗衣機 1分鍾

其實只花了 1+5+3+1 = 10分鍾

多線程的做法
單核下

線程1  准備燒開水 1分鍾, 等開水燒開 8 分鍾 , 關掉燒水機 1分鍾
線程2  舉杠鈴100下  10分鍾
線程3  准備洗衣服 1分鍾, 等開水燒開 5 分鍾 , 關掉洗衣機 1分鍾

cpu 可能這么切換 最理想的切換方式

線程1  准備燒開水1  sleep  1          sleep 5            sleep 1          sleep 2          關開水 1分鍾 exit
線程2    sleep 1      sleep  1            舉杠鈴50 5分鍾    sleep 1          舉杠鈴20 2分鍾  sleep1      舉杠鈴30下 3分鍾      
線程3    sleep  1      准備洗衣服1 分鍾    sleep 5            關洗衣機1分鍾    exit

最后使用了  14分鍾  和異步是一樣的。
但是實際上是不一樣的,因為線程不會按照我們設想的去跑, 如果線程2 舉杠鈴先跑,整個流程的速度就下來了。

異步和同步的區別,  在io等待的時候,同步不會切走,浪費了時間。

如果都是獨占cpu 的業務, 比如舉杠鈴的業務, 在單核情況下 多線和單線 沒有區別。

多線程的好處,比較容易的實現了 異步切換的思想, 因為異步的程序很難寫的。多線程本身程還是以同步完成,但是應該說
比效率是比不上異步的。 而且多線很容易寫, 相對效率也高。

多核的好處,就是可以同時做事情, 這個和單核完全不一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM