Кража работы/задачи ThreadPoolExecutor

В своем проекте я создаю среду выполнения Java, которая получает рабочие запросы от клиента. Работа (различного размера)разбивается на набор задач, а затем ставится в очередь для обработки. Существуют отдельные очереди для обработки каждого типа задач, и каждая очередь связана с ThreadPool. Пулы потоков настроены таким образом, чтобы общая производительность ядра была оптимальной.

Такой дизайн помогает нам эффективно распределять нагрузку по запросам, а большие запросы не перегружают системные ресурсы. Однако иногда решение становится неэффективным, когда некоторые из очередей пусты, а их соответствующие пулы потоков простаивают.

Чтобы сделать это лучше, я подумал о реализации метода кражи работы/задачи, чтобы сильно загруженная очередь могла получить помощь от других пулов потоков. Однако для этого может потребоваться реализация моего собственного Executor, поскольку Java не позволяет связывать несколько очередей с ThreadPool и не поддерживает концепцию кражи работы.

Читал о Fork/Join, но это не похоже на то, что мне нужно. Любые предложения или альтернативный способ создания этого решения могут быть очень полезными.

Спасибо Энди

7
задан Anand Nadar 14 April 2012 в 12:32
поделиться