2015-08-27 2 views
2

Должны ли мы использовать пул потоков для длинных потоков или запускать собственные потоки? Есть ли какой-то шаблон дизайна?Должны ли мы использовать пул потоков для длинных потоков?

+0

Бассейны типичны, когда вы их создаете довольно часто. – Stefan

+0

Создание не часто, но есть ли другие преимущества управления потоками, которые реализации потоков пула предоставляют OOTB, что было бы полезно? Есть ли вред в использовании пула потоков для длинных потоков? –

+0

Не уверен, может быть, эта статья помогает: http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor – Stefan

ответ

3

К сожалению, это зависит. Нет жесткого правила, в котором говорится, что вы должны всегда использовать пулы потоков.

Пулы потоков предлагают две основные вещи:

  1. делегированы создание/повторное использование потоков.
  2. Back-давление

ИМО, это свойство обратного давления, это интересно, но часто наиболее плохо изучены. Ваша машина работает с ограниченным набором ресурсов. Если у вас (скажем) 8 ядер процессора и все они заняты работой, вы хотели бы сообщить, что каким-то образом добавление большего количества работы (отправка большего количества задач) не поможет, по крайней мере, не в плане латентности.

По этой причине java.util.concurrent.ExecutorService реализации позволяют указать java.util.concurrent.BlockingQueue по вашему выбору. Когда эта очередь будет увеличиваться, вызовы потоков будут блокироваться до тех пор, пока пул потоков не сможет завершить выполняемые задачи.

Должен ли иметь длинные потоки внутри пула потоков, зависит от того, что он делает. Если поток постоянно занят (это значит, что он никогда не будет завершен), он всегда будет занимать слот в пуле потоков, что является бессмысленным.

Относительно делегированного создания/повторного использования потоков; возможно, у вас может быть два пула, один для длительных задач и один для других задач. Или, возможно, длинный пул потоков с одним слотом, это предотвратит запуск двух длительных задач одновременно, при условии, что это то, что вы хотите.

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

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