Интересно, где грань, после которого должен использоваться пул потоков. Сколько новых потоков в секунду я могу создать, не используя пул потоков, все еще избегающий значимой потери производительности?
Есть ли какие-либо заметные реализации пула потоков с открытым исходным кодом?
Вы всегда должны использовать пул потоков. Не только для производительности, но и для простоты использования, который предоставляет вам пакет 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
Учитывая стоимость, единственный правильный ответ - проверить это самому (не очень элегантный способ сказать вам, что я никогда не делал такого теста и никогда не буду делать, так как современный механизм исполнения предоставляет гораздо более продвинутые механизмы создания/уничтожения).
Если рассматривать существующие реализации, то современные версии Java (начиная с Java 5) предлагают различные подклассы ThreadPoolExecutor, которые объединяют преимущества пула потоков с самыми современными концепциями java.util.concurrent : Executors.
Кроме того, я никогда не посоветую вам забыть о Threads и заменить их на Runnable, callable и другие более продвинутые вычислительные объекты. Таким образом, вы сможете легко переключиться на реализацию Executors.
Создание потоков всегда дорого, независимо от платформы. Фактическое время создания потока зависит от ОС.
Я бы рекомендовал использовать пул потоков, если вы очень часто создаете короткоживущие потоки. Например, если основной задачей вашего приложения является обслуживание таких короткоживущих задач, пул потоков будет очень кстати.
Пул потоков также полезен, если вы создаете слишком много потоков. Переключение контекста между потоками тоже может снизить производительность. Короче говоря, на современных ПК с четырехъядерной архитектурой вы должны стремиться к тому, чтобы одновременно работало не более 200 потоков.