问题标签 [akka-dispatcher]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
akka - Akka Dispatcher 线程创建
我一直在研究 Akka Actor 模型。我有一个用例,其中将有 1000 多个演员处于活动状态,我必须处理这些演员。我想过通过application.conf中定义的配置来控制线程数。
但不是。在我的应用程序中创建的调度程序线程使我无法调整调度程序配置。每次重新启动我的应用程序时,我都会看到创建了不同数量的调度程序线程(我每次启动应用程序后都通过线程转储检查了这一点)。
甚至线程数也不等于我在 parallelism-min 中定义的线程数。由于线程数很少,我的应用程序处理速度非常慢。在检查没有。通过以下代码在我的机器中获取核心:
Runtime.getRuntime().availableProcessors();
它显示 40。但没有。即使我将并行度配置为 500,创建的调度程序线程数也少于 300。
以下是我的 application.conf 文件:
我可以知道 akka 将在什么基础上在内部创建调度程序线程以及如何增加调度程序线程数以增加参与者的并行处理?
akka - Actor 消息分配到调度程序线程
众所周知,Dispatcher 线程负责执行参与者消息。使用吞吐量参数,我们可以定义否。在移动到另一个参与者之前由调度程序线程处理的消息
但我不确定调度程序线程将如何选择演员?
比如说,我创建了 10,000 个参与者,其中一次只有 1000 个参与者接收消息,其余 9000 个参与者处于空闲状态,调度程序线程数为 200。
调度程序线程将按照哪个顺序选择参与者的消息。它是否也会检查空闲演员邮箱的消息?
谁能解释调度程序线程选择参与者邮箱消息的流程。
multithreading - 何时使用相同 Akka 演员的更多实例?
我已经使用 Akka 有一段时间了,但现在正在深入探索它的演员系统。我知道有线程轮询执行器和分叉连接执行器和 afinity 执行器。我知道调度程序是如何工作的以及所有其他细节。顺便说一句,这个链接给出了很好的解释
https://scalac.io/improving-akka-dispatchers
然而,当我尝试一个简单的调用actor并切换执行上下文时,我总是得到大致相同的性能。我同时运行 60 个请求,平均执行时间约为 800 毫秒,只需将简单的字符串返回给调用者。
我在具有 8 核(英特尔 i7 处理器)的 MAC 上运行。
所以,这里是我尝试的执行上下文:
所以,问题是:
- 在这个例子中是否有机会获得更好的表现?
- 演员实例的全部内容是什么?这有多重要,如果我们知道调度程序正在调度线程(使用执行上下文)以在来自 Actor 邮箱的下一条消息上执行该线程内的 Actor 的接收方法。演员接收方法不只是像回调吗?演员实例的数量何时开始发挥作用?
- 我有一些正在执行 Future 的代码,如果我直接从主文件运行该代码,它的执行速度比我将其放入 actor 并从 actor 执行 Future 将其结果通过管道传送给发送者时快 100-150 毫秒。是什么让它变慢了?
如果你有一些现实世界的例子来解释这一点,那就太受欢迎了。我读了一些文章,但都是理论上的。如果我在一个简单的例子上尝试一些东西,我会在性能方面得到一些意想不到的结果。
这是一个代码
呼叫者:
该代码非常基本,只是为了测试它的行为方式。
akka - 为什么actorSystem没有创建要使用自定义调度程序运行的actor
嗨,文件中有以下类型安全配置application-typed.conf
。
下面是 akka 类型的 actor 代码。
当我运行代码时,我得到以下输出。
PrintMeActor 应用程序在线程中启动 PrintAnyTypeMessage-akka.actor.default-dispatcher-6 在线程中得到 PrintMessageAny(test) PrintAnyTypeMessage-akka.actor.default-dispatcher-6
我希望这个演员在自定义线程池上运行,但它没有发生。我怎样才能达到同样的效果?