【Java线程】互斥 同步 异步 并发 多线程的区别与联系
1. 并發:在操作系統中,是指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行。其中兩種并發關系分別是同步和互斥;
2. 互斥:進程間相互排斥的使用臨界資源的現象,就叫互斥。
3. 同步:進程之間的關系不是相互排斥臨界資源的關系,而是相互依賴的關系。進一步的說明:就是前一個進程的輸出作為后一個進程的輸入,當第一個進程沒有輸出時第二個進程必須等待。具有同步關系的一組并發進程相互發送的信息稱為消息或事件。
其中并發又有偽并發和真并發,偽并發是指單核處理器的并發,真并發是指多核處理器的并發。
4. 并行:在單處理器中多道程序設計系統中,進程被交替執行,表現出一種并發的外部特種;在多處理器系統中,進程不僅可以交替執行,而且可以重疊執行。在多處理器上的程序才可實現并行處理。從而可知,并行是針對多處理器而言的。并行是同時發生的多個并發事件,具有并發的含義,但并發不一定并行,也亦是說并發事件之間不一定要同一時刻發生。
5. 多線程:多線程是程序設計的邏輯層概念,它是進程中并發運行的一段代碼。多線程可以實現線程間的切換執行。
異步和多線程并不是一個同等關系,異步是最終目的,多線程只是我們實現異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回而可以做其它的事情。實現異步可以采用多線程技術或則交給另外的進程來處理。
舉例如下:
在一段時間內,我要做如下三件事情:做飯、洗衣服、做俯臥撐100下;
1、 燒開水(10分鐘):準備燒開水1分鐘,等水燒開8分鐘,收拾燒水用具1分鐘;
2、做飯(13分鐘):準備做飯1分鐘,等飯做好10分鐘,收拾做飯用具2分鐘;
3、 做俯臥撐(10分鐘):做俯臥撐100下,10分鐘;
一個線程的做法:
一、單核情況下
1、同步:
花費10+13+10=33分鐘
2、異步:
在一件事情完成的間隙,我們可以去做別的事情。
花費15分鐘
二、在雙核情況下
1、異步 并行
核1(10分鐘):準備燒開水(1分鐘)+做俯臥撐50下(5分鐘)+等待3分鐘+收拾燒水用具(1分鐘);
核2(13分鐘):準備做飯(1分鐘)+做俯臥撐50個(5分鐘)+等待5分鐘+收拾做飯用具(2分鐘);
花費13分鐘
2、異步 非并行
核1(10分鐘):做俯臥撐100下(10分鐘;
)
核2(14分鐘):準備燒開水(1分鐘)+準備做飯(1分鐘)+等待7分鐘+收拾燒水用具(1分鐘)+等待2分鐘+收拾做飯用具(2分鐘); 花費14分鐘
多線程的做法:
一、單核情況下:
線程1:準備燒開水(1分鐘)、sleep8分鐘、收拾燒水用具(1分鐘)、exit;
線程2:sleep1分鐘、準備做飯(1分鐘)、sleep10分鐘、收拾做飯用具(2分鐘)、exit;
線程3:sleep2分鐘、做俯臥撐70下(7分鐘)、sleep1分鐘、做俯臥撐20下(2分鐘),sleep2分鐘、做俯臥撐10下(1分鐘)、exit;
花費15分鐘 和異步是一樣的。但實際上是不一樣的,因為線程不會按照我們設想的去跑, 如果線程3 舉杠鈴先跑,整個流程的速度就慢下來了。
總結:
1、異步和同步的區別, 在io等待的時候,同步不會切走,浪費了時間。
2、如果都是獨占cpu 的業務, 比如做俯臥撐的業務, 在單核情況下 多線程和單線程沒有區別。
3、 多線程的好處,比較容易的實現了異步切換的思想, 因為異步的程序很難寫的。多線程本身還是以同步完成,但是應該說比效率是比不上異步的。 而且多線很容易寫, 相對效率也高。
4、多核的好處,就是可以同時做事情, 這個和單核完全不一樣的。
總結
以上是生活随笔為你收集整理的【Java线程】互斥 同步 异步 并发 多线程的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java线程】多线程实现简单的一对一聊
- 下一篇: 两类传输协议:TCPUDP总结