Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为大量并发图形配置akka dispatcher_Java_Akka_Akka Stream_Java.util.concurrent - Fatal编程技术网

Java 为大量并发图形配置akka dispatcher

Java 为大量并发图形配置akka dispatcher,java,akka,akka-stream,java.util.concurrent,Java,Akka,Akka Stream,Java.util.concurrent,我当前的系统大约有10万个运行图,每个运行图都是这样构建的: Amqp源~>处理阶段~>接收器 每个amqp源以每秒1的速率接收消息。只有大约10000个图形一次接收消息,所以我认为不需要超过10000个线程同时运行 以下是我当前使用的设置: my-dispatcher { type = Dispatcher executor = "fork-join-executor" fork-join-executor { parallelism-min = 16 parall

我当前的系统大约有10万个运行图,每个运行图都是这样构建的:

Amqp源~>处理阶段~>接收器

每个amqp源以每秒1的速率接收消息。只有大约10000个图形一次接收消息,所以我认为不需要超过10000个线程同时运行

以下是我当前使用的设置:

my-dispatcher {
  type = Dispatcher
  executor = "fork-join-executor"
  fork-join-executor {
    parallelism-min = 16
    parallelism-factor = 2.0
    parallelism-max = 32
  }
  throughput = 20
}
显然,这些设置没有为想要的性能定义足够的资源,因此我想知道:

  • 我假设一万个线程就足够了,对吗
  • 是否可以(通过编辑application.conf)为该数量的线程配置dispatcher?配置看起来如何?我应该选择“fork-join-executor”还是“thread-pool-executor”作为执行器

  • 谢谢。

    Akka和Akka Streams是基于异步的,参与者或流只使用一个线程进行大块处理,然后将线程交还给线程池,这很好,因为您可以根据实际执行线程所需的内核数量而不是要执行的内容来调整线程池的大小。拥有多个线程会带来开销,这既包括调度/切换,也包括JVM为每个线程分配大约0.5-1Mb的堆栈

    因此,10000个参与者或正在运行的流仍然可以在一个小线程池中很好地执行。增加线程数量可能会减慢处理速度,而不是加快处理速度,因为在线程之间切换会花费更多的时间。即使是默认设置也可以,您应该在调优时始终进行基准测试,以查看更改是否达到预期效果


    通常,fork-join池为参与者和流提供了良好的性能。基于线程池的应用程序适用于无法避免阻塞的情况(请参阅文档的这一部分:)

    Akka和Akka Streams基于异步,参与者或流仅使用线程进行大块处理,然后将线程交回线程池,这很好,因为您可以根据实际执行线程所需的内核数量而不是要执行的内容来调整线程池的大小。拥有多个线程会带来开销,这既包括调度/切换,也包括JVM为每个线程分配大约0.5-1Mb的堆栈

    因此,10000个参与者或正在运行的流仍然可以在一个小线程池中很好地执行。增加线程数量可能会减慢处理速度,而不是加快处理速度,因为在线程之间切换会花费更多的时间。即使是默认设置也可以,您应该在调优时始终进行基准测试,以查看更改是否达到预期效果


    通常,fork-join池为参与者和流提供了良好的性能。基于线程池的应用程序适用于无法避免阻塞的情况(请参阅文档的这一部分:)

    感谢您的回复!但我仍然不能完全理解在一个相当小的线程池上运行10000个并发流如何不会导致图形之间的阻塞,这最终会导致每个源上的消息累积。感谢您的回复!但我仍然不能完全理解在一个相当小的线程池上运行10000个并发流如何不会导致图之间的阻塞,这最终会导致每个源上的消息累积。