Одно ядро процессора без гиперпоточности всегда может запускать один поток. Вы можете создавать множество потоков, и процессор будет переключаться между ними.
Лучший номер зависит от задачи. Если это задача, которая потребляет много ресурсов ЦП и не требует ввода-вывода (например, вычисления числа Пи, простых чисел и т. Д.), Тогда лучше всего будет использовать 1 поток на ЦП. Если задача больше связана с вводом / выводом. Подобно обработке информации с диска, вы, вероятно, получите лучшую производительность, если будете иметь более одного потока на процессор. В этом случае доступ к диску может иметь место, пока ЦП обрабатывает информацию с предыдущего чтения диска.
Я предлагаю вам провести некоторое тестирование того, как производительность в вашей ситуации зависит от количества потоков на ядро ЦП, и принять решение на основе этого. Затем, когда ваше приложение запускается, оно может проверить availableProcessors()
и решить, сколько потоков должно появиться.
Благодаря гиперпоточности одно ядро будет отображаться в операционной системе и во всех приложениях, включая availableProcessors()
, как 2 процессора, поэтому, если ваше приложение может использовать гиперпоточность, вы получите преимущество. Если нет, то производительность будет немного снижаться, но, вероятно, этого будет недостаточно, чтобы приложить дополнительные усилия для удовлетворения своих потребностей.