2016-03-07 3 views
2

У меня есть требование, когда мне нужно обработать некоторые задачи для Текущие живые выступления. Это запланированные задачи и выполняется каждую минуту.Executors.newFixedThreadPool() - насколько это дорогостоящая операция

В любой момент минуту, может быть любое число живых шоу (хотя число не может быть, что большая, примерно не более 10). Для всех живых выступлений необходимо выполнить более 20 функций. или говорят, что там есть 20 рабочих классов, все там работают.

Предположим, что для первой функциональности есть 5 показов, после чего через несколько минут снижается до 2, затем снова через несколько минут увеличивается до 7.

В настоящее время я делаю что-то вроде этого,

int totalShowsCount = getCurrentShowsCount(); 
ExecutorService executor = Executors.newFixedThreadPool(showIds.size()); 

Вышеприведенное запускается на выполнение каждую минуту.

Постановка задачи

1.) Сколько дорогой вышеописанная операция будет .. ??. Создание fixedThreadPool в каждую минуту.

2.) Что я могу сделать для оптимизации моего решения, следует ли использовать фиксированный пул потоков, скажем (10) и, возможно, 3 или 5 или 6 или любое количество потоков, используемых в любую минуту.

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

FYI, используя Java8, если имеется лучший подход.

+0

Почему вы каждый раз воссоздаете новую «Исполнительную службу»?Невозможно ли каким-либо образом инициировать его (при запуске) и повторно использовать его каждый раз? – Spotted

+0

@Spotted У меня 20 рабочих, каждый рабочий га сидит на собственном рабочем месте, я хочу создать отдельные пулы для всех работников - должен ли я .. ?? если я создаю общий пул для всех работников, может быть случай, когда я потребляю больше потоков, все работники начнут каждую минуту, может быть случай, когда один из моих работников остается без какого-либо потока. –

+0

Почему бы не использовать один изменяемый размер пула ('Executors.newCachedThreadPool')? – apangin

ответ

3

Сколько стоит вышеуказанная операция .. ??. Создание fixedThreadPool в каждую минуту.

Создание пула потоков - относительно дорогостоящая операция, которая может занять миллисекунду. Вы не хотите делать это много раз в секунду.

Вторая - это вечность для компьютера, если у вас 36-ядерная машина, она может выполнить до 100 миллиардов инструкций за это время. Минута очень и очень длительная, и если вы только что-то делаете раз в минуту, вы можете даже перезапустить JVM каждую минуту и ​​по-прежнему получать разумную пропускную способность.

Что я могу сделать для оптимизации моего решения, следует ли использовать фиксированный пул потоков, скажем (10) и, возможно, 3 или 5 или 6 или любое количество потоков, используемых в любую минуту.

Возможно, это зависит от того, что вы делаете. Без большинства анализов вы могли бы точно сказать. Примечание. Если вы используете parallelStream(), если вы не видите, можете ли вы использовать встроенный файл ForkJoinPool.commonPool() и не нужно создавать другой пул. Но опять же, это зависит от того, что вы делаете.

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