併發 並行 同步 異步 多線程

本篇博客着重講解併發,並行,異步,多線程的理論理解和彼此之間的區別,希望可以給這方面理解不足的博友帶來幫助。

併發

在操作系統中,是指一個時間段中有幾個程序都處於已啓動運行到運行完畢之間,且這幾個程

序都是在同一個處理機上運行。其中兩種併發關係分別是同步互斥

互斥

進程間相互排斥的使用臨界資源的現象,就叫互斥。

同步

進程之間的關係不是相互排斥臨界資源的關係,而是相互依賴的關係。進一步的說明:就是前一個進程的輸出作爲後一個進程的輸入,當第一個進程沒有輸出時第二個進程必須等待。具有同步關係的一組併發進程相互發送的信息稱爲消息或事件。

其中併發又有僞併發和真併發,僞併發是指單核處理器的併發,真併發是指多核處理器的併發。

並行

在單核處理器中多道程序設計系統中,進程被交替執行,表現出一種併發的外部特種;

在多核處理器中,進程不僅可以交替執行,而且可以重疊執行。在多核處理器上的程序纔可實現並行處理。從而可知,並行是針對多核處理器而言的。

並行是同時發生的多個併發事件,具有併發的含義,但併發不一定並行,也亦是說併發事件之間不一定要同一時刻發生。

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

多線程

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

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

多線程同步原因:

在多線程程序下,同步能控制對共享資源的訪問。如果沒有同步,當一個Java線程在修改一個共享變量時,另外一個線程正在使用或者更新同一個變量,這樣容易導致程序出現錯誤的結果。

異步

異步和同步是相對的,同步就是順序執行,執行完一個再執行下一個,需要等待、協調運行。

異步就是彼此獨立,在等待某事件的過程中繼續做自己的事,不需要等待這一事件完成後再工作。

線程就是實現異步的一個方式。異步是讓調用方法的主線程不需要同步等待另一線程的完成,從而可以讓主線程幹其它的事情。

異步和多線程並不是一個同等關係,異步是最終目的,多線程只是我們實現異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回而可以做其它的事情。實現異步可以採用多線程技術或則交給另外的進程來處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章