Ale*_*ich 4 java multithreading
我读过很多类似的问题.但是我对答案不太满意.
我想构建一个算法,根据平均速度调整线程数.
让我们说当我引入一个新线程时,任务执行的平均速度会增加,这意味着新线程是好的.然后算法应该尝试添加另一个线程......直到达到最佳线程数.......
算法也应该跟踪平均速度.如果在某些时候平均速度显着下降,让我们说10%(因为任何原因,例如我打开一个不同的应用程序或其他),那么算法应终止一个线程,看看速度是否上升...
也许这样的API存在.请给我任何指示或任何代码示例如何实现这样的算法
谢谢 !
我不知道您正在描述的自调系统,但是一旦您使用准备好的线程池,它听起来就不是那么复杂的任务.从concurrency包中获取线程池,实现TimeConsumptionCallable implements Callable包装任何其他可调用的类并只测量执行时间.
现在,您只需在平均执行时间增加或减少时更改(增加或减少)工作线程数.
在决定更改工作线程数之前,请不要忘记您需要足够的统计信息.否则,不依赖于您的应用程序的各种随机效果可能会导致您的线程池一直增长并且一直停止,这本身就会导致整体性能下降.
newCachedThreadPool()V/s newFixedThreadPool建议您可能应该查看ExecutorService.newCachedThreadPool().
创建一个根据需要创建新线程的线程池,但在它们可用时将重用先前构造的线程.这些池通常会提高执行许多短期异步任务的程序的性能.如果可用,执行调用将重用先前构造的线程.如果没有可用的现有线程,则将创建一个新线程并将其添加到池中.未使用60秒的线程将终止并从缓存中删除.因此,长时间闲置的池不会消耗任何资源.请注意,可以使用ThreadPoolExecutor构造函数创建具有相似属性但不同详细信息的池(例如,超时参数).
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |