Как дорогой создает нового потока в Java? Когда мы должны рассмотреть использование пула потоков?

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

Есть ли какие-либо заметные реализации пула потоков с открытым исходным кодом?

5
задан Roman 7 July 2010 в 13:20
поделиться

3 ответа

Вы всегда должны использовать пул потоков. Не только для производительности, но и для простоты использования, который предоставляет вам пакет java.util.concurrent. В Java 5 и более поздних версиях пул потоков встроен.

Вместо того, чтобы думать о «потоках», используйте интерфейс Executor для выполнения необходимых вам задач. Создать новый пул потоков очень просто:

Executor executor = Executors.newFixedThreadPool(5);

Полная документация по пакету java.util.concurrent находится здесь: http://java.sun.com/javase/6/docs/api/java/util/concurrent/package-frame.html

5
ответ дан 14 December 2019 в 01:01
поделиться

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

Если рассматривать существующие реализации, то современные версии Java (начиная с Java 5) предлагают различные подклассы ThreadPoolExecutor, которые объединяют преимущества пула потоков с самыми современными концепциями java.util.concurrent : Executors.

Кроме того, я никогда не посоветую вам забыть о Threads и заменить их на Runnable, callable и другие более продвинутые вычислительные объекты. Таким образом, вы сможете легко переключиться на реализацию Executors.

4
ответ дан 14 December 2019 в 01:01
поделиться

Создание потоков всегда дорого, независимо от платформы. Фактическое время создания потока зависит от ОС.

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

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

0
ответ дан 14 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: