当前位置: 首页 > 知识库问答 >
问题:

动态设置线程池大小的完成阶段在发挥!用Akka

李睿
2023-03-14

在我的web应用程序中,我正在使用Play!构建在Akka基础上的用于管理线程的框架。在一个特定的案例中,我组合了许多从外部服务收集数据的CompletionStages,我希望控制并行请求的数量,以便不使那些外部服务负担过重。在不更改整个应用程序的情况下做到这一点的一种方法是控制Akka使用的线程池大小。现在我在akka like中准备了两个线程池,并尝试在这两个池之间进行切换。我正在使用下面这样的内容来编写我的CompletionStages:

CompletableFuture.completedFuture(firstResult)
                        .thenComposeAsync( firstResult -> { dostuff(firstResult);}

根据Akka的文档,这是如何设置当前线程池的:

// this is scala.concurrent.ExecutionContext
// for use with Futures, Scheduler, etc.
final ExecutionContext ex = system.dispatchers().lookup("my-dispatcher");

共有1个答案

夏立果
2023-03-14

您需要将自定义的执行传递给thencomposeasync方法:

final java.util.concurrent.Executor exec = system.dispatchers().lookup("my-dispatcher");

CompletableFuture.completedFuture(firstResult)
                 .thenComposeAsync(firstResult -> {
                   dostuff(firstResult);
                 }, exec);
 类似资料:
  • 我的应用程序中有如下工作流:可以有X个用户请求(通常同时有5-10个),他们希望在系统中搜索某些东西(每个请求在单独的线程中处理)。 每个搜索都可以并行处理(我目前正在实现)。线程/CPU使用实际上不是这里的问题,因为这些任务不需要占用CPU。数据库是瓶颈。 目前,我只为搜索机制设置了一个单独的DB连接池-最大池大小设置为10。我知道这不多,但我不能把它设置得更高。现在我试图弄清楚如何为每个搜索(

  • 嗨,我有一个骆驼路线,它分割一条传入的消息,然后我想聚合这条消息,但我不知道会分割多少条消息。 我使用了以下方法: 这不起作用,而且挂起了……不过,如果我将完成大小设置为一个数值,它就起作用了。 有人知道如何动态聚合,并等待完成。顺便说一下,标题是在分割之前设置的。

  • 问题内容: 我有一个运行时间很长的过程,可以监听事件并进行一些激烈的处理。 目前,我通常用于限制并发运行的作业数量,但是根据一天中的时间以及其他各种因素,我希望能够动态地增加或减少并发线程的数量。 如果我减少了并发线程的数量,那么我希望当前正在运行的作业能够很好地完成。 是否有Java库可以让我控制并动态增加或减少线程池中运行的并发线程数?(该类必须实现ExecutorService)。 我必须自

  • 问题内容: 我需要在Java(java.util.concurrent)中实现一个线程池,该线程池在空闲时处于最小数量,在作业提交到其完成速度快于完成时会增长到一个上限(但永远不会超过上限) ,并且在完成所有作业且不再提交任何作业时,缩小到下限。 您将如何实现这样的目标?我想这将是一个相当普遍的使用场景,但是显然工厂方法只能创建固定大小的池,并且当提交许多作业时池会无限增长。本类提供和参数,但它的

  • 最近,我一直在尝试寻找一个用于线程并发任务的库。理想情况下,一个简单的接口,调用线程上的函数。任何时候都有n个线程,有些线程完成得比其他线程快,并且在不同的时间到达。 首先我在试Rx,这在c语言中很好。我也研究了区块和TBB,但它们都依赖于平台。对于我的原型,我需要保持平台独立性,因为我们还不知道它将在什么平台上运行,并且在做出决定时可以更改。 C 11有很多关于线程和并发的东西,我发现了很多关于

  • 我使用的是SpringBoot2.0。3释放。我想增加HikariCP的最大池大小,默认情况下为10。 我试着在带有 spring.datasource.hikari.maximum-池-大小=200 但是它不起作用,因为在日志中它仍然显示最大池大小为10。 我想改变的原因是,我不知怎么地达到了登台的极限,我不知道是什么原因造成的。