java - 使用 ThreadPoolExecutor 的 CPU 性能

标签 java multithreading

我正在使用在 PriorityQueue 上执行的 TheadPoolExecutor。我将最小池大小设置为 5,最大池大小设置为 50。当我们运行负载测试时,我们看到 CPU 跳跃了 10%。线程转储显示

pool-1-thread-5"prio=3 tid=0x020f69a0 nid=0xa3 等待条件 [0xb517f000..0xb517f970] 在 sun.misc.Unsafe.park( native 方法) 在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:118) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1841) 在 java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:200) 在 java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) 在 java.lang.Thread.run(Thread.java:595)

想知道我在 ThreadPoolExecutor 中使用的 prestartAllCoreThreads() 会有任何性能问题吗?

TIA

最佳答案

sun.misc.Unsafe.park方法是 ThreadPoolExecutor 创建的线程将等待直到收到新消息的地方。 ThreadPoolExecutor 内部有一个队列 Runnable它会分包给等待的线程。如果您的系统空闲或相当安静,预计会看到相当多的线程在此方法中等待。

如果您正在分析系统,此方法通常会成为时间的主要消耗者。如果线程大部分时间都在等待工作完成,则这是预期的。

关于java - 使用 ThreadPoolExecutor 的 CPU 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833507/

相关文章:

java - JAX-WS 线程占用 %100 CPU

安卓等待()不工作

java - 如何为多线程 Java 服务器实现观察者设计模式?

c# - Thread.Sleep(0) 在 .NET Core 3.1 上没有按预期工作

java - 这些 sleep 线程如何工作?

java - Joda LocalDate 的属性编辑器异常

java - Liferay 6.2 CE-GA6 使 NTLM 适用于 chrome 和 firefox?

c# - BackgroundWorker 限制 worker 数量并在可用时创建它们

java - 我需要一个可以通过滑动来更改的图标列表,这样整个内容就会改变

java - Java 中带有 char 和整数文字的整数运算