當您需要執行I/O(即數據庫操作)時,actor模型(在Akka中)如何工作?I/O如何在阿卡工作?
我的理解是阻塞操作會拋出一個異常(並且由於Akty使用Netty的均勻性質而導致所有併發性基本上被破壞)。因此,我將不得不使用Future
或類似的東西 - 但我不明白併發模型。
- 1個actor是否可以同時處理多個消息?
- 如果一個演員在
future
(即future.get()
)中發起阻止呼叫,是否阻止當前演員的執行;還是會阻止所有參與者執行,直到阻止呼叫完成? - 如果它阻止所有執行,如何使用未來的輔助併發(即不會在將來調用阻塞調用仍等於創建一個參與者並執行阻塞調用)?
- 什麼是處理多階段過程(即從數據庫中讀取;調用阻塞Web服務;從數據庫中讀取數據;寫入數據庫)的最佳方式,其中每個步驟都依賴於最後一個階段?
的基本背景是這樣的:
- 我使用的WebSocket服務器,這將維持數千個會話。
- 每個會話都有一些狀態(即驗證細節等)。
- Javascript客戶端將發送一個JSON-RPC消息給服務器,服務器會將它傳遞給相應的會話參與者,該參與者將執行它並返回結果。
- 執行RPC調用將涉及一些I/O並阻止調用。
- 會有大量的併發請求(每個用戶將通過WebSocket連接發出大量請求,並且會有很多用戶)。
有沒有更好的方法來實現這一目標?
我很驚訝沒有人提到使用類似於Node.js/Twisted/gevent等方法的異步IO。 –