Должны ли мы использовать пул потоков для длинных потоков или запускать собственные потоки? Есть ли какой-то шаблон дизайна?Должны ли мы использовать пул потоков для длинных потоков?
ответ
К сожалению, это зависит. Нет жесткого правила, в котором говорится, что вы должны всегда использовать пулы потоков.
Пулы потоков предлагают две основные вещи:
- делегированы создание/повторное использование потоков.
- Back-давление
ИМО, это свойство обратного давления, это интересно, но часто наиболее плохо изучены. Ваша машина работает с ограниченным набором ресурсов. Если у вас (скажем) 8 ядер процессора и все они заняты работой, вы хотели бы сообщить, что каким-то образом добавление большего количества работы (отправка большего количества задач) не поможет, по крайней мере, не в плане латентности.
По этой причине java.util.concurrent.ExecutorService
реализации позволяют указать java.util.concurrent.BlockingQueue
по вашему выбору. Когда эта очередь будет увеличиваться, вызовы потоков будут блокироваться до тех пор, пока пул потоков не сможет завершить выполняемые задачи.
Должен ли иметь длинные потоки внутри пула потоков, зависит от того, что он делает. Если поток постоянно занят (это значит, что он никогда не будет завершен), он всегда будет занимать слот в пуле потоков, что является бессмысленным.
Относительно делегированного создания/повторного использования потоков; возможно, у вас может быть два пула, один для длительных задач и один для других задач. Или, возможно, длинный пул потоков с одним слотом, это предотвратит запуск двух длительных задач одновременно, при условии, что это то, что вы хотите.
Как вы можете видеть, нет ни одного хорошего ответа. Это действительно сводится к тому, что вы пытаетесь достичь, и как вы хотите использовать имеющиеся ресурсы.
- 1. Должны ли мы использовать собственные потоки или пул потоков для небольших и частых задач?
- 2. Пул потоков для быстрых всплесков коротких потоков?
- 3. Рекурсивное добавление потоков в пул потоков Java
- 4. Пул потоков для WSO2 ESB
- 5. HostingEnvironment.QueueBackgroundWorkItem использует пул потоков ASP.Net или другой пул потоков?
- 6. Как создать пул потоков?
- 7. Пул потоков Java ExecutorService: порядок выполнения потоков
- 8. Как создать отдельный пул потоков, который использует пул основных потоков
- 9. Недостатки использования ThreadPool для длинных потоков
- 10. Пул потоков с BlockingCollection
- 11. PHP пул потоков?
- 12. Когда создается пул потоков?
- 13. Задача ориентированной пул потоков
- 14. Python - Преобразование потоков в пул потоков?
- 15. Пустой пул потоков
- 16. IOS пул потоков
- 17. Пул потоков в Java
- 18. C++ Пул потоков
- 19. Что такое пул потоков?
- 20. Пул потоков в NodeJs
- 21. Пул потоков работает последовательно?
- 22. Инициализировать пул потоков
- 23. Помощь в пул потоков
- 24. Пул потоков сервлета
- 25. Когда использовать пул потоков в C#?
- 26. (Как) Использует ли TPL (CLR) пул потоков?
- 27. Akka.net и пул потоков IIS
- 28. Spring - убедитесь, что пул потоков
- 29. Пул потоков в Qt 4.3
- 30. Должен ли я использовать пул потоков или потоков для загрузки файлов
Бассейны типичны, когда вы их создаете довольно часто. – Stefan
Создание не часто, но есть ли другие преимущества управления потоками, которые реализации потоков пула предоставляют OOTB, что было бы полезно? Есть ли вред в использовании пула потоков для длинных потоков? –
Не уверен, может быть, эта статья помогает: http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor – Stefan