Насколько дорого стоит создание нового потока в Java? Когда следует рассмотреть возможность использования пула потоков? - PullRequest
5 голосов
/ 07 июля 2010

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

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

Ответы [ 3 ]

5 голосов
/ 07 июля 2010

Вы всегда должны использовать пул потоков. Не только для производительности, но и для простоты использования пакет 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

4 голосов
/ 07 июля 2010

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

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

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

0 голосов
/ 07 июля 2010

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

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

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

...