【发布时间】:2020-06-22 13:40:39
【问题描述】:
我有一台四核机器。在高负载下,响应时间非常糟糕。这很明显,因为工作队列在高负载下增长,而 4 个并行线程只能消耗这么快。
Mono.just(stream)
.flatMap(handler::handleRequest)
.subscribeOn(Schedulers.parallel())
.subscribe(this::response)
同样,当我收到对 I/O 调用的响应时,我会执行 .publishOn(Schedulers.parallel()) 以便在 CPU 调整线程上处理响应。
我正在考虑使用有界弹性调度程序来启动我的管道,并将并行线程仅用于 CPU 密集型任务(POJO 操作和哈希计算)。所以基本上,我在弹性线程上启动管道并在弹性线程上处理响应。
我使用无限弹性调度程序对我的应用程序进行了基准测试,但堆大小爆炸了。但是,等待时间肯定会更短。但是,如果我创建了太多线程,调度开销在某些时候会超过较低的等待时间。
如何优化我的应用程序?我的目标是每个JVM 大约 800 TPS。推荐创建那么多线程吗?
【问题讨论】:
-
也许我是个笨蛋,但我对TPS这个词不熟悉?
-
哦,对不起。每秒事务数。
标签: java multithreading concurrency project-reactor reactor