我正在尝试构建一个实现ExecutorService
,我们称之为SequentialPooledExecutor
,具有以下性质。
的所有实例SequentialPooledExecutor
共享同一个线程池
调用同一个实例SequentialPooledExecutor
是按顺序执行的。
换句话说,实例会等待当前正在执行的任务终止,然后再开始处理队列中的下一个任务。
我目前正在实施SequentialPooledExecutor
我自己,但我想知道我是否在重新发明轮子。我研究了不同的实现ExecutorService
,例如那些由Executors
类,但我没有找到符合我要求的类。
您知道我是否缺少现有的实现,或者我应该继续自己实现接口吗?
EDIT:
我觉得我的要求不是很清楚,让我们看看我是否可以用其他语言来解释它。
假设我有一系列会话,比如说 1000 个(我之前调用执行器实例的东西)。我可以将任务提交到会话,并且我希望保证提交到同一会话的所有任务都按顺序执行。但是,属于不同会话的任务不应相互依赖。
我想定义一个ExecutorService
它执行这些任务,但使用有限数量的线程(假设为 200 个),但确保在同一会话中的前一个任务完成之前不会启动任务。
我不知道是否有任何现有的东西已经做到了这一点,或者我是否应该实施这样的ExecutorService
myself.
如果您有数千个必须按顺序处理的键,但您没有数千个核心,则可以使用散列策略来分配工作,如下所示
ExecutorService[] es = // many single threaded executors
public <T> Future<T> submit(String key, Callable<T> calls) {
int h = Math.abs(key.hashCode() % es.length);
return es[h].submit(calls);
}
一般来说,你只需要 2 * N 个线程来保持 N 个核心忙碌,如果你的任务受 CPU 限制,更多只会增加开销。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)