Как стать автором
Обновить

Комментарии 11

Я размер пула потоков подбираю методом научного тыка. Запускаю сначала Ncpu потоков, затем увеличиваю в два раза и сравниваю скорость. Если скорость работы упала, то уменьшаю, если возросла, то еще увеличиваю. И так нахожу оптимальный для данной задачи размер пула. Обычно хватает 4-5 пробных запусков по 5-10 минут.
Это хорошо, если у вас приложение всего 1 задачу решает. Если же таких тяжёлых задач несколько, то методом тыка уже не выкрутитесь, нужно как-то шарить потоки между задачами, чтоб не было ситуации, когда одна задача забьёт весь пул, и остальные задачи будут простаивать в ожидании.
А зачем isRunning статическая? Чтобы, выключая один пул, рубануть и все остальные?
Поправил, спасибо.
Или это опечатка, или я запутался: время выполнения всех задач было 15 секунд, но потом «время выполнения уменьшилось до 28 секунд». Оно все-таки увеличилось? Или 15 секунд это было время выполнения одной задачи?
Существует несколько независимых причин, по которым производительность могла упасть
Время увеличилось — поправил, спасибо.
Существует несколько независимых причин, по которым производительность могла упасть
В формуле вычисления оптимального пула потоков видимо должно быть не
Runtime.getRuntime().availProcessors ()
, а
Runtime.getRuntime().availableProcessors()
.
общая загрузка процессора в пользовательском пространстве составляет всего 2,5%, и у нас есть много неиспользуемых системных ресурсов.

14,87% же. Плюс 2,5% ядро ОС, 83,7% «неиспользуемых системных ресурсов»
14,87%
что как раз соответствует 100% / 4 / 2 + «ещё немного», т.к. полностью загружено одно ядро из четырёх физических, наверняка с включённым HT, и работает что-нибудь ещё.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории