Actor是一個封裝狀態(state)和行爲(behavior)的對象,它們只經過交換消息通訊(放入收件人郵箱的郵件)。從某種意義上說,Actor是最嚴格的面向對象編程形式,但它更適合將他們視爲人:在與Actor建模解決方案時,設想一羣人併爲他們分配子任務,將他們的功能安排到一個組織結構,並思考如何處理失敗。html
ActorSystem是一個重量級結構,它將分配1 ... N個線程,所以每一個邏輯程序建立一個。編程
就像在經濟組織中同樣,Actor天然造成等級制度。程序中某個功能的一個Actor可能但願將其任務分解爲更小,更易於管理的部分。爲此目的,它啓動它監督的子Actor。網絡
雖然解釋了監督的細節,但咱們將集中討論一些基本概念。惟一的先決條件是要知道每一個Actor都有一個主管,即建立它的Actor。閉包
Actor系統的典型特徵是任務被分割和委派,直到它們變得足夠小以便一體化處理。在這樣作的過程當中,不只任務自己結構清晰,並且能夠根據他們應該處理哪些消息,他們應該如何正常反應以及如何處理失敗。若是一個Actor沒有處理某種狀況的手段,它會向其主管發送相應的失敗消息,尋求幫助,遞歸結構容許在高的級別處理失敗。併發
相比之下,分層軟件設計很容易轉化爲防護性編程,目的是不泄漏任何故障。若是問題傳達給合適的人,能夠找到一個更好的解決方案,而不是試圖保持一切「在地毯下」。ide
如今,設計這樣一個系統的困難在於如何決定誰應該監督什麼。沒有單一的最佳解決方案,但有一些指南可能會有所幫助:性能
這些規則老是有例外,但不管你是遵照規則仍是違反規則,都應該有理由。ui
Actor系統做爲互相協做Actor集合,Actpr管理共享設施(如調度服務,配置,日誌記錄等)的天然單元。具備不一樣配置的幾個actor系統能夠在同一JVM中共存而沒有問題,沒有全局共享狀態在Akka自己。將此與Actor系統之間的透明通訊(在一個節點內或經過網絡鏈接)相結合,以查看Actor系統自己能夠用做功能層次結構中的構建塊。spa
actor系統管理她所配置的資源,以便運行它包含的actor。在一個這樣的系統中可能有數百萬的Actor,固然,應用程序做者沒法控制在大型系統中處理消息的確切順序,這也不是能夠預期的。退後一步,放鬆,讓Akka在引擎蓋下進行繁重的操做。線程
當您知道應用程序的全部內容都已完成時,您能夠調用ActorSystem的terminate方法。這將阻止監護Actor,又會遞歸地中止其全部的子Actor 。
若是要在終止ActorSystem時執行某些操做,請查看CoordinatedShutdown。
下節再續!
原文:https://doc.akka.io/docs/akka/2.5/guide/tutorial_5.html