天天看點

elixir 高可用系列(一) Agent概述使用方法總結

elixir 本身是一種 immutable 的語言,預設情況下,程序間是不共享任何狀态的,程序之間通過消息來互動。

而 Agent 則封裝了一種程序間共享狀态的方式,通過這種方式,不用顯式的寫 send/receieve 的代碼,就能友善的在程序之間共享狀态。

首先,看一個在不用 Agent 的情況下,如何擷取程序狀态的例子。

測試 WithoutAgent 的使用:

從上面的使用可以看出,為了使用 WithoutAgent 中的狀态(一個 map),外部還必須要自己管理 WithoutAgent 的傳回的狀态 m,

通過 WithoutAgent 來改變狀态時,每次都要将目前狀态 m 作為一個參數傳給 WithoutAgent。

隻有一個程序使用 WithoutAgent 時,上述方式沒有什麼問題,當有多個程序使用 WithoutAgent,每個程序持有的狀态 m 很難保持一緻。

使用 Agent 來重新實作上面的例子:

測試 WithAgent 的使用:

從上面的使用中可以看出,使用了 Agent 之後,使用方完全不用自己管理 WithAgent 的狀态,隻要操作狀态即可。

這樣,多個程序同時使用 WithAgent 時,也不用管狀态沖突的事情,狀态如果有沖突也是在 WithAgent 中自己管理。

總的來說,Agent 就是狀态的簡單的封裝,友善程序間狀态的共享。

本文轉自wang_yb部落格園部落格,原文連結:http://www.cnblogs.com/wang_yb/p/5422683.html,如需轉載請自行聯系原作者