Multithreading Akka:如何配置路由器、调度器以提高性能?
我已经在阿克卡打了两周了,仍然对一些基本概念感到困惑 我有一个非常简单的模式,包含三种演员:Multithreading Akka:如何配置路由器、调度器以提高性能?,multithreading,scala,akka,Multithreading,Scala,Akka,我已经在阿克卡打了两周了,仍然对一些基本概念感到困惑 我有一个非常简单的模式,包含三种演员: 主人 工人 记者 我将这些参与者配置如下: 主人 主调度员使用以下带RoundRobinRouter(10)的调度员: 工人 我在这个系统中有几个工人(ref),他们都从主服务器接收消息,每个人都使用RoundRobinRouter(10)路由器 通知者 只是一个演员用来从工人那里接收结果,然后计算。 它使用与worker相同的调度器 我对并行参数和路由器做了一些调整,但性能似乎没有变化。耗用100
- 主人
- 工人
- 记者
- 32位ubuntu 12.04 lts
- 内存5.0 GiB
- 英特尔®核心™ i5-2500 CPU@3.30GHz×4
我的错,对不起 我没有看到你的配置文件。你也能做到这一点吗?调整参与者系统的性能是一项艰巨的任务。但如果不知道任务是什么(例如,它是否执行任何阻塞操作、从IO读取等),就很难判断该做什么或是否可以执行任何操作。从数字上看,您似乎已经具备了很高的并行性,因为按顺序执行1亿个500毫秒的任务所需的时间远远超过80秒。所以问题是,你的目标是什么。如果80秒对于您的用例来说足够快,我不会尝试进一步调整它,除非您有充分的理由这样做。您的机器中只有4个内核。所有的磁芯都能以接近100%的速度工作吗?在处理过程中是否会产生大量垃圾?您可以连接jconsole和/或启用gc日志以查看是否存在问题。如果所有处理器都已占用,并且您正在执行的任务是CPU受限的,即没有发生磁盘/网络io,则您可能达到了最大性能。当然,仍有可能进行优化。可能您有太多的上下文切换或太多的线程在运行,减少总线程的数量甚至可以提高性能。但是,我认为当我们看不到到底发生了什么时,我们没有任何有用的建议。另一个改进可能是取消两个自定义调度程序,并通过actor系统中的默认调度程序运行所有内容。这将减少运行的线程数量,从而减少CPU上的负载。只要没有一个演员在做阻止io的事情,我就不认为需要单独的调度员。
mailbox-capacity = 10000
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 0
parallelism-max = 600
parallelism-factor = 3.0
}
type = Dispatcher
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 0
parallelism-max = 600
parallelism-factor = 3.0
}
mailbox-capacity = 100000