处理线程池中具有不同优先级的任务

dov*_*mir 11 java concurrency event-handling threadpool

我有许多优先传入的任务A,B并且C我想在多核CPU上使用线程池处理任务.70%的CPU应该用于处理"类型A"任务,20%的CPU用于"类型B"任务,10%用于"类型C"任务.

但是,如果只有'type C'的任务到达,那么100%的CPU应该专门用于它们.如果只有任务BCarirve那么66%将完成任务B和33%任务C等...

你会如何在Java中实现它?

ps:优先级队列不起作用,因为那时只会处理任务类型.此外,为线程分配优先级不会起作用,因为它不准确.

JB *_*zet 3

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

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

  • 是的,但由于这个确切的原因,该解决方案无法处理 OP 规定的限制。如果 8 个 CPU 密集型“C”任务在 CPU 上运行,而“A”类型的任务很少到达,那么它肯定不会遵守“A 使用 70% CPU”的不变量,因为您还没有让操作系统意识到的这个要求。 (2认同)