Scala併發編程Actor介紹

Actor介紹

scala的Actor併發編程模型可以用來開發比Java線程效率更高的併發程序。我們學習scala Actor的目的主要是爲後續學習Akka做準備。


Java併發編程的問題

在Java併發編程中,每個對象都有一個邏輯監視器(monitor),可以用來控制對象的多線程訪問。我們添加sychronized關鍵字來標記,需要進行同步加鎖訪問。這樣,通過加鎖的機制來確保同一時間只有一個線程訪問共享數據。但這種方式存在資源爭奪、以及死鎖問題,程序越大問題越麻煩。
在這裏插入圖片描述

線程死鎖
在這裏插入圖片描述



Actor併發編程模型

Actor併發編程模型,是scala提供給程序員的一種與Java併發編程完全不一樣的併發編程模型,是一種基於事件模型的併發機制。Actor併發編程模型是一種不共享數據,依賴消息傳遞的一種併發編程模式,有效避免資源爭奪、死鎖等情況。

在這裏插入圖片描述


Java併發編程對比Actor併發編程

Java內置線程模型 scala Actor模型
"共享數據-鎖"模型 (share data and lock) share nothing
每個object有一個monitor,監視線程對共享數據的訪問 不共享數據,Actor之間通過Message通訊
加鎖代碼使用synchronized標識
死鎖問題
每個線程內部是順序執行的 每個Actor內部是順序執行的

[!NOTE]

scala在2.11.x版本中加入了Akka併發編程框架,老版本已經廢棄。Actor的編程模型和Akka很像,我們這裏學習Actor的目的是爲學習Akka做準備。



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