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