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


《七周七並發模型》第五章Actor引言

使用actor就像租車——我們如果需要,可以快速便捷地租到一輛;如果車輛發生故障,也不需要自己修理,直接打電話給租車公司更換另外一輛即可。

actor模型是一種適用性非常好的通用並發編程模型。它可以應用於共享內存架構和分布式內存架構,適合解決地理分布型的問題。同時它還能提供很好的容錯性。

5.1 更加麵向對象

函數式編程不使用可變狀態,也就避免了共享可變狀態帶來的問題。相比之下,使用actor 模型保留了可變狀態,隻是不進行共享。actor類似於麵向對象(OO)編程中的對象——其封裝了狀態,並通過消息與其他actor通信。

兩者的區別是一個actor與其他actor是同時運行的,並且與OO式的“消息傳遞”(實質上隻是調用一個方法)不同,actor之間的消息傳遞是真實地在傳遞消息。

actor模型是一個通用的並發編程模型,幾乎可以用在任何一種編程語言裏, 典型的是 Erlang①。而我們將用Elixir②來介紹actor模型,它是運行在Erlang虛擬機(BEAM)上的相對較新的一門編程語言。
與Clojure類似,Elixir是一門不純粹的、動態類型的函數式語言。如果你熟悉Java或者Ruby,很容易就能看懂Elixir代碼。與以往一樣,我們不會把本章寫成Elixir的教程(本書的主旨是並發,而不是編程語言),但仍將介紹一些必要的語言特性。如果你對這門語言並不熟悉,那就不得不在某些地方“盲目”接受本書的說法——如果想深入學習Elixir,推薦閱讀Programming Elixir[Tho14]。

第一天,我們將學習actor模型的基礎——如何創建actor、發送消息和接收消息。第二天,學習使用actor模型的程序具有容錯性的關鍵:失敗檢測和“任其崩潰”的哲學。第三天,學習如何通過actor模型編寫分布式程序,將計算擴展到多台計算機,並能從一台或多台計算機的崩潰中恢複過來。

最後更新:2017-05-23 09:31:37

  上一篇:go  《七周七並發模型》第一章概述
  下一篇:go  《七周七並發模型》第五章Actor總結