我讀過akka文檔,並且在使用akka時無法對線程交互產生乾淨的理解。 Docs可能會忽略這個東西,但它對我來說並不那麼明顯。akka actor如何在線程之間進行交互
所有的阿卡演員似乎都在同一個線程中運行,他們被稱爲。我將演員視爲共同程序,每次接到呼叫時都有自己的堆棧重置。
您可以執行一系列直線切換演員。每個接收執行小的非阻塞操作並強制另一個接收進一步工作。沒有事件循環,可以處理演員系統之外的消息。
我想趕上來自其他線程的請求,執行控制操作,並等待另一條消息。
有一些用例概述了我的需求。
有線程不斷地輪詢來自某些來源的數據。一旦數據匹配模式,它就基於actor來調用事件驅動的處理程序。邏輯控制器做出決定並將其傳遞給工作人員。應該有兩個持久線程。一個線程在輪詢中不斷工作,另一個線程異步工作以控制它的工作。你不應該讓akka演員第一次線程,因爲他們打破了投票時間,第一個線程不應該阻止演員,所以他們需要另一個線程。
有某種雙面棋盤遊戲。一方擁有一個控制器線程,用於安排與電路板服務器等進行交互的計算時間。其他線程是一個沉重的計算線程遍歷不同的變體和因爲它已阻止自然
不能寫在阿卡我意識到現有的阿卡期貨,但它們代表了運行一次發射和關閉工作任務在執行他們的目標後下來。期貨與akka演員很好地結合,但不能表達循環的工作線索。
Akka演員系統包含不同種類的網絡事件循環。您可以使用其內置的遠程參與者系統或衆所周知的0mq協議。但是使用網絡進行線程交互似乎對我來說過分了。
將akka線與akka線粘合起來的方法是什麼?我應該寫幾個特殊的程序來以線程安全的方式執行消息傳遞嗎?
嗯,我不認爲我們會忽略所有這些:http://akka.io/docs/akka/2.0-RC4/scala/dispatchers.html – 2012-03-04 16:38:19
再一次更正:akka演員不會在相同的情況下運行他們被調用的線程,請參閱我之前對文檔的評論。演員不是共同程序。 「堆棧重置」不是JVM支持的概念。 actor模型比線程更高的抽象層次。將消息傳遞給一個actor始終是線程安全的(參見'ActorRef.tell()') – 2012-03-04 16:48:00
我建議你用apache camel集成checkout akka以便如何響應外部事件。這本書Akka Essentials http://www.packtpub。com/akka-java-applications-essentials/book對Java和Scala中大量可運行示例代碼的線程模型進行了清晰的描述,以獲得所有基礎知識。 – simbo1905 2013-06-29 22:28:47