Actor模式初步入門

2022-07-01 15:57:10 字數 1182 閱讀 9348

actor模型為並行而生,簡單說是未解決高併發的一種程式設計思路。在actor模型中,主角是actor,類似一種worker,actor彼此之間直接傳送訊息,不需要經過什麼中介,訊息是非同步傳送和處理的。在actor模式中,「一切皆是actor」,所有邏輯或者模組均別看做actor,通過不同actor之間的訊息傳遞實現模組之間的通訊和互動。actor模型描述了一組為了避免併發程式設計的常見問題的公理:

1.所有actor狀態是actor本地的,外部無法訪問。  

2.actor必須只有通過訊息傳遞進行通訊。  

3.乙個actor可以響應訊息:推出新actor,改變其內部狀態,或將訊息傳送到乙個或多個其他參與者。  

4.actor可能會堵塞自己,但actor不應該堵塞它執行的執行緒。

傳統的併發程式設計方式大都使用「鎖」的機制,相信大多數都是」悲觀鎖「,這裡幾乎可以斷定會出現兩個明顯的問題:

1.隨著專案體量增大,業務愈加複雜,不可避免大量使用「鎖」,然而大家都知道「鎖」的機制其實很耗效能的,所以大量使用鎖的機制肯定會造成效率不高

2.即使大量依賴「鎖」解決了系統中資源競爭的情況,但是由於沒有乙個規範的程式設計模式,最後系統的穩定性肯定會出問題,最根本的原因是沒把系統的任務排程抽象出來,由於任務排程和業務邏輯的耦合在一起,很難做乙個很高層的抽象,保證任務排程有序。

3.難以維護等等弊端

上面是傳統通過「鎖」的機制實現併發程式設計的缺點,然而actor為什麼一定層度上可以解決這些問題呢?個人認為其最根本的原因是actor模式下提供了一種可靠的任務排程系統,也就是在原生的執行緒或者協程級別上做了更高層次的封裝。這會給程式設計模式帶來巨大的好處:

1.由於抽象了任務排程系統,那麼就可以使系統的執行緒排程可控,易於統一處理,穩定性和可維護性好

2.作為開發者我們只需要關心每個actor的邏輯就可以了,避免「鎖」的「濫用」

3.actor也提供了很多基本準則,避免了很多併發程式設計中的問題  

那麼actor沒有缺點嗎?那也不是,比如當所有邏輯都跑在actor中時,很難掌控actor的粒度,稍有不慎就可能造成系統中actor個數**的情況,actor當出現必須共享資料或者狀態時就很難避免使用「鎖」,但似乎由於上面的「actor可能會堵塞自己,但actor不應該堵塞它執行的執行緒」準則衝突,哈哈,這個時候也許可以選擇使用redis做資料共享

actor技術現在還是蠻成熟的,最著名的原生支援actor併發模式的erlang,還有內建actor核心庫的scala語言。

Linux初步入門

對於linux的初步入門以前都要對計算機概論有一些了解。1.計算機 接收使用者輸入指令與資料,經過 處理器的資料與邏輯單元運算處理後,以產生或儲存成有用的資訊。2.計算機五大硬體 輸入單元 輸出單元 cpu內部的控制單元 算術邏輯單元與記憶體五大部分。3.cpu種類 精簡指令集 risc 與複雜指令...

python初步入門

help obj 檢視幫助 import 檔名 匯入乙個檔案 from 檔名 import 方法名 匯入檔案中的乙個方法 dir var 檢視變數屬性和方法 none 空物件 邏輯運算 and or not elif elseif 沒有switch語句 沒有三目運算子 for迴圈 for 變數 in...

Treap初步入門

樹堆,在資料結構中也稱 rm treap 是指有乙個隨機附加域滿足堆的性質的二叉搜尋樹,其結構相當於以隨機資料插入的二叉搜尋樹。其基本操作的期望時間複雜度為 rm o logn 相對於其他的平衡二叉搜尋樹,rm treap 的特點是實現簡單,且能基本實現隨機平衡的結構。rm q 為什麼要用 rm t...