2014-11-11 4 views
1

Ищет решение для оптимизации обработки рабочих нагрузок, поступающих либо из фона, либо из источников задач API. Код задачи - это только один класс Callable. Я предполагаю, что наличие двух отдельных пулов потоков для разных источников задач менее изящное решение. Поэтому мне нужны следующие свойства, которые должны быть у ExecutorService:Масштабируемый приоритет ThreadPoolExecutor

  • динамически динамически настраивать порядок выполнения задач на основе интерфейса Comparable. java.util.concurrent.PriorityBlockingQueue делает это уже. Я могу передать это как аргумент java.util.concurrent.ThreadPoolExecutor, так что это уже обработано.
  • количества потоков предпочтительно scale up and down dynamically (с)

Пока Java сообщество динамично, может быть, кто-то сделали уже решить эту проблему в любую доступную библиотеку? Или я должен переопределить методы PriorityBlockingQueue?

+1

Вы можете получить ограниченную форму автомасштабирования, используя [этот шаблон] (http://stackoverflow.com/a/15032613/552759). Кроме того, вы заботитесь о голодании задач с более низким приоритетом, что делает вещи «более сложными». – jtahlborn

+0

@jtahlborn благодарит, любые комментарии приветствуются –

+1

@nefo_x Как выглядит ваша работа (Callables)? Являются ли они в/в тяжелыми или просто связаны? Если они привязаны к процессору, вы все равно можете масштабировать до количества ядер. –

ответ

1

Для части динамического масштабирования это может немного помочь: https://stackoverflow.com/a/19538899/999043 (на самом деле, вы хотите прочитать и другие ответы). Для части приоритета убедитесь, что сортировка очереди и вставка не влияют на масштабируемость.

Смежные вопросы