【发布时间】:2015-04-08 19:24:28
【问题描述】:
在his famous concurrency book 中,Goetz 建议可以使用
计算池中的最佳线程数N threads = N CPU * U CPU * (1 + W/C)
W/C 是等待计算比率。我想开发一个自定义Executor,它将使用ThreadPoolExecutor.setCorePoolSize() 调整工作线程数量,但我不知道如何计算WC-ratio。假设这个 ThreadPool 是我的应用程序使用的唯一一个,我该如何计算该比率?
有没有办法跟踪工作线程在等待/睡眠上花费了多少时间? 或者有没有解决这个问题的实现?
【问题讨论】:
-
请注意,应用程序工作人员可能会改变他们的行为,例如开始等待 http 响应的时间更长或更短,我希望他们能够动态调整,从而随着时间的推移跟踪每个 W/C ......就像 jvisualvm 那样。 ..
-
不是你需要的 Thread.getState() 吗?
-
我知道 getState() 但我不知道如何使用它?我应该在某个预定时间查询所有工作线程还是有一种方法可以订阅状态更改...或者这些状态中的哪些处于 W 下我假设两个睡眠等待阻塞都是...因此我需要一些建议。 ..
-
如果您在 visualvm 中看到它可以跟踪所有运行时间、等待时间停车时间等...不知道我是如何仅使用 getState 做到这一点...我认为这里涉及到 jmx.. .
-
到目前为止,除了在循环中检查线程状态之外,我不知道任何其他方法。我会尝试研究它,因为它很有趣。
标签: java optimization concurrency