actor模型除了erlang和skynet用得廣泛嗎?

actor模型除了erlang和skynet用得廣泛嗎?


應該說非常廣泛,有很多直接支持它的語言 比如你說的erlang,還有scala等;其他主流語言也有相關的庫或框架,比如用於.net的 https://github.com/AkkaDotNet/akka.net


actor模型,本質上認為,對象之間最適合的,是通過消息傳遞的方式來進行通信。消息發送者,不需要去關注消息接受者具體在哪裡,怎麼發給它,如何定址這些由管理器來負責。

除去erl之外,zeromq也是這樣的,雖然在大的層面來看,zmq更多的是封裝了各種網路模式的實現,但是在內部實現上,zmq表現為將消息體在不同的對象之間來進行轉發。

我受erl/actor模型/zmq的影響比較深,自己做自己的網路庫時,雖然是C++版本的,但是在不同的模塊進行通信的時候,也是採用類似actor的模型:發送者只關注發送什麼消息和發送給誰,內部實現上由管理器來識別接收者的位置發送給它.


非常廣泛,scala有個非常優秀的框架akka就是基於actor,這個框架寫的贊以至於scala去掉自己原來的actor部分直接改用akka。akka除了支持actor以外還支持stm這種模型,也可以體驗一下。吸引人的特性還有remote,cluster等。而且如果你是一個javaer,akka為之提供了很好的api


搜skynet進來的……

引用某位天下2開發者大佬的說法「明白了Actor以後,人們才知道了面向對象程序應該怎麼寫」,我挺贊同的,哈哈。

在A對象中調用B對象的方法然後直接跑到B對象裡面執行代碼,相比Actor的發消息機制,會有很多缺點。Actor不僅很新潮很適合併發,還打開了面向對象的另一扇門。

只需要等待,幾年後Actor模型會被充分用到3D遊戲引擎中去,現在已經有一些閉源引擎在這麼做了。


推薦閱讀:

如何用C語言實現異常/狀況處理機制?
Lua 語言有哪些不足?
為什麼Lua不支持大多數編程語言都有的continue,卻非得支持一般情況下用得很少的 repeat until ?
為什麼很多編程語言用 end 作為區塊結束符,而放棄花括弧?
unity中lua的開發工具?

TAG:Erlang編程語言 | 伺服器架構 | Lua | 並發 |