在his famous concurrency book,Goetz的表明可使用优化线程池大小
N threads = N CPU * U CPU * (1 + W/C)
W/C
是等待到计算的比率来计算线程池中的最佳数目。我想开发一个自定义Executor
,它将使用ThreadPoolExecutor.setCorePoolSize()
调整工作线程数量,但我不知道如何计算WC比率。假设ThreadPool
是我的应用程序使用的唯一一个,我该如何计算该比率?
有没有办法跟踪工作线程在等待/睡眠上花费多少时间? 还是有解决这个问题的任何实施?
请注意,应用程序的工作人员可能会改变他们的行为,比如开始等待http响应时间更长或更短,我希望他们动态调整,从而跟踪每个人随着时间的推移...像jvisualvm这样做... – vach 2015-03-13 13:55:42
isn' t Thread.getState()你需要什么? – 2015-03-13 13:58:42
那么我知道getState(),但我不知道如何使用它?我应该查询所有工作线程的某个预定时间,还是有一种方法来订阅状态更改......或者哪些状态是在W下进行的我假设两个睡眠等待阻塞都是......因此我需要一些建议。 .. – vach 2015-03-13 14:04:11