閱讀613 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java 並發/多線程教程——4並發模型

        本係列譯自jakob jenkov的Java並發多線程教程(本章節部分內容參考https://ifeve.com/並發編程模型),個人覺得很有收獲。由於個人水平有限,不對之處還望矯正!

       

        並發係統可以有多種並發模型來實現,並發模型指定線程如何協同完成分配給他們的任務。不同的並發模型以不同的方式劃分任務,並且線程與線程之間以不同的方式進行通信和協作。



        並發模型與分布式係統的相似性
        本文中描述的並發模型類似於分布式係統中使用的不同體係結構。在並發係統中,不同的線程彼此通信。在分布式係統中,不同的進程彼此通信(可能在不同的計算機上)。線程和進程在本質上是非常相似的。這就是為什麼不同的並發模型通常看起來與不同的分布式係統體係結構相似。
        分布式係統在處理網絡失效、遠程主機或進程宕掉等方麵也麵臨著額外的挑戰。但一個並發係統運行在一個大型服務器中有可能也會遇到類似的問題,比如一塊 CPU 失效、一塊網卡失效或一個磁盤損壞等情況。雖然失敗的概率可能較低,但在理論上它仍然可能發生。
        由於並發模型與分布式係統體係結構相似,所以它們常常可以互相借鑒。例如,為工作者們(線程)分配作業的模型一般與分布式係統中的負載均衡係統比較相似。同樣,它們在日誌記錄、失效轉移、冪等性等錯誤處理技術上也具有相似性。


        1、並行工作者(Parallel worker)

        在並行worker模型中,傳入的作業會被分配到不同的工作者,下圖展示並行工作者模型

     1240

        在並行工作者模型中,委派者將傳入的作業分配給不同的工作者。每個工作者完成整個任務,這些工作者並行運行在不同的線程上,甚至可能不在同一個CPU上。

        如果在車廠利用並行工作者模型,那麼每一輛車都是由一工人來完成的,這些工人都要有汽車的生產說明書,並且從頭到尾完成一輛車的生產。

        並行工作者並發模型是Java應用中最常用的一種並發模型(盡管這個情況在改變)。在java.util.concurrent包中的很多並發工具類的目的是為了應用這個模型。在Java企業版的服務器應用中,也可以看到這個模型的蹤跡。

最後更新:2017-06-26 22:33:32

  上一篇:go  雲服務器 ECS 學習筆記
  下一篇:go  互聯網動物園 - Logo 合集