akka jvm threads vs os threads when performing io
我已经搜索了一下该网站,以帮助理解这一点,但没有找到任何超级清晰的东西,所以我想我会发布我的用例,看看是否有人能提供一些启示。
我有一个关于在akka中用于io操作时jvm线程与os线程的缩放的问题。从阿卡网站:
Akka 支持事件驱动的轻量级线程和基于线程的 Actor 的调度程序,前者允许在单个工作站上创建数百万个线程,后者将每个调度程序绑定到专用的 OS 线程。
基于事件的Actor目前每个Actor消耗约600个字节,这意味着您可以在4 G RAM上创建超过650万个Actor。
在这种情况下,你们能否帮助我理解这在只有1个处理器的工作站上的重要性(为简单起见)。因此,对于我的示例用例,我想列出1000个“用户”,然后查询一个(或多个)数据库以获取有关每个用户的各种信息。因此,如果我将这些“get”任务中的每一个都分派给一个Actor,并且该Actor将要执行IO,那么该actor不会基于工作站的os线程限制来阻止吗?
在这样的场景中,akka演员模型如何给我提升?我知道我可能错过了一些东西,因为我对vm线程与os线程的互通并不了解,所以如果这里的一个聪明人能为我拼出来,那就太好了。
如果我使用期货,我不需要使用 await() 或 get() 来阻止并等待回复吗?
在我的用例中,无论参与者是谁,它最终是否只会“感觉”我发出了1000个顺序数据库请求?
如果代码片段有助于帮助我理解这一点,那么Java将是首选,因为我仍在加快scala语法的速度 - 但是对于这些数百万线程如何在执行数据库IO的同时在单处理器机器上进行互操作的漂亮清晰的文本解释也很好。