gpt4 book ai didi

java - 按顺序执行任务但从池中获取线程的 ExecutorService

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:04 25 4
gpt4 key购买 nike

我正在尝试构建 ExecutorService 的实现,我们称它为 SequentialPooledExecutor,具有以下属性。

  1. SequentialPooledExecutor 的所有实例共享同一个线程池

  2. 对同一 SequentialPooledExecutor 实例的调用按顺序执行。

换句话说,实例在开始处理其队列中的下一个任务之前等待当前正在执行的任务的终止。

我目前正在自己​​实现 SequentialPooledExecutor,但我想知道我是否在重新发明轮子。我查看了 ExecutorService 的不同实现,例如 Executors 类提供的实现,但没有找到满足我要求的实现。

您是否知道我是否缺少现有的实现,或者我应该继续自己实现接口(interface)?

编辑:

我觉得我的要求不是很清楚,让我看看能不能换个词解释一下。

假设我有一系列 session ,假设有 1000 个(我之前调用执行程序实例的东西)。我可以将任务提交到 session ,并且我希望保证提交到同一 session 的所有任务都按顺序执行。但是,属于不同 session 的任务不应相互依赖。

我想定义一个 ExecutorService 来执行这些任务,但使用有限数量的线程,比方说 200,但要确保任务不会在同一 session 中的前一个任务启动之前启动完成。

我不知道是否有任何现有的东西已经这样做了,或者我是否应该自己实现这样一个 ExecutorService

最佳答案

如果您有数千个必须按顺序处理的键,但您没有数千个核心,您可以使用散列策略来分配这样的工作

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 限制,那么更多只会增加开销。

关于java - 按顺序执行任务但从池中获取线程的 ExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39912669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com