java - 处理线程池中不同优先级的任务

标签 java concurrency event-handling threadpool

我有许多优先级为 ABC 的传入任务,我想在多核上用线程池处理这些任务中央处理器。 70% 的 CPU 应该用于处理“type A”任务,20% 的 CPU 用于“type B”任务,10% 的 CPU 用于“type C' 任务。

但是,如果只有“类型 C”的任务到达,则应该将 100% 的 CPU 分配给它们。如果只有任务 BC 到达,则 66% 将处理任务 B 和 33% 任务 C 等。 ..

您将如何在 Java 中实现它?

附注: 优先队列将不起作用,因为只有类型的任务才会被处理。此外,为线程分配优先级也行不通,因为它不准确。

最佳答案

也许你应该使用 3 个线程池。 1 个包含 7 个线程的池用于 A 任务,1 个包含 2 个线程的池用于 B 任务,1 个包含 1 个线程的池用于 C 任务。

编辑:即使只有 C 任务(或者,如果你有很多处理器,如果你只有 B 和 C 任务)也有并行性,将每个池中的线程数乘以处理器数,或者处理器数量 + 1,或您喜欢的任何其他更大的因素。

关于java - 处理线程池中不同优先级的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646958/

相关文章:

c# - 将我自己的参数发送给事件处理程序?

c# 如何将事件处理程序添加到 foreach 循环中的多个菜单?

java - 递归回溯返回更新值

java - 如何确定 ActionListener 中的事件源?

java - Java 中使用尽可能少的锁进行并发字节数组访问

java - 用于围绕错误进程包装超时的标准 Java 模式

vb.net - 根据另一个类 VB.nET 的线程引发的事件更新 GUI 项目

java - 为什么 NetBeans 在 OS X 上运行我的程序,而不是将其构建到 JAR 中?

java - Android Q(API 级别 29)不加载 HTTPS 网站。给出错误:(net::ERR_ACCESS_DENIED)

concurrency - 来自 fanIn 示例的 golang 并发模式