Может ли создание потоков в Java стать узким местом? - PullRequest
2 голосов
/ 11 декабря 2011

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

Или разница будет незначительной?

Ответы [ 3 ]

9 голосов
/ 11 декабря 2011

Это было бы намного медленнее;потоки имеют большие издержки.

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

Измерьте это!

2 голосов
/ 11 декабря 2011

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

Я рекомендую использовать ExecutorService.

0 голосов
/ 11 декабря 2011

Создание нового потока - не лучший способ из-за накладных расходов на создание. Вместо того, чтобы создавать новые потоки, вы должны по крайней мере использовать пул потоков (подробнее см. Исполнитель ).

Также важен жизненный цикл потоков. Если он слишком короткий, производительность может быть еще хуже из-за переключения контекста.

Другим важным моментом является количество процессоров / ядер, которые у вас есть. Как правило, вы должны использовать 1-2 потока на ядро, если ваши задачи сильно нагружают процессор (я полагаю, это ваш случай). Вы можете немного увеличить это число (скажем, 3-5), если ваши задачи требуют интенсивного ввода-вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...