Java中是否有自调整线程池?

时间:2014-12-23 17:01:34

标签: java multithreading

我并不总是知道最佳线程池大小,因为它取决于内核的数量以及我的线程所做的cpu和io工作的比率。毫无疑问,我可以描绘并选择最佳尺寸。 此外,我可以编写自己的智能池,随着时间的推移将调整为最佳。但在我这样做之前,是否有代码或库可以做到这一点?

TNX

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。

我需要在固定的时间片中运行任意数量的I / O绑定任务(Runnables或Callables)。这种情况在固定的时间间隔内反复发生。举个例子,假设我需要每隔3000毫秒才能确保执行143个受网络I / O严重约束的任务。

我最终得到this as a solution,似乎效果很好。基本上,我会跟踪池大小和任务成功/失败率和延迟的一些内部指标。在少数几次迭代中,有足够的信息可以根据池的大小来计算负责大小,然后从那里优化池大小,慢慢接近最小池大小,在适当的时间范围内完成执行目标。

我从不打算在我的具体用例之外概括它,但我很确定有机会这样做。

答案 1 :(得分:-2)

ForkJoinPool不能解决您的问题吗?

来自javadoc:

  

创建一个ForkJoinPool,其并行度等于Runtime.availableProcessors()