当您需要执行 I/O(即数据库操作)时,actor 模型(在 Akka 中)如何工作?
据我了解,阻塞操作会引发异常(并且由于 Akka 使用的 Netty 的事件性质,基本上会破坏所有并发性)。因此,我将不得不使用 aFuture
或类似的东西 - 但是我不了解并发模型。
- 1个演员可以同时处理多条消息吗?
- 如果一个actor在a
future
(ie.future.get()
) 中进行了阻塞调用,那么它只会阻塞当前actor的执行;还是会阻止对所有参与者的执行,直到阻塞调用完成? - 如果它阻塞了所有执行,那么使用 future 辅助并发性(即将来不会调用阻塞调用仍然等于创建一个参与者并执行阻塞调用)?
- 处理每一步都依赖于最后一步的多阶段过程(即从数据库读取;调用阻塞 Web 服务;从数据库读取;写入数据库)的最佳方法是什么?
基本上下文是这样的:
- 我正在使用将维护数千个会话的 Websocket 服务器。
- 每个会话都有一些状态(即身份验证详细信息等);
- Javascript 客户端将向服务器发送 JSON-RPC 消息,服务器会将其传递给适当的会话参与者,后者将执行它并返回结果。
- RPC 调用的执行将涉及一些 I/O 和阻塞调用。
- 将有大量并发请求(每个用户将通过 WebSocket 连接发出大量请求,并且会有很多用户)。
有没有更好的方法来实现这一目标?