Компьютер может запускать потоки number_of_cores только параллельно.Если система имеет только одно ядро, одновременно запускается только один поток.Многозадачность «симулируется» только при последовательном запуске каждого потока в течение очень коротких периодов времени.
Обычно ОС произвольно распределяет потоки по ядрам.Например, один квант потока может быть запущен на одном ядре, а следующий квант того же потока может быть запущен на другом ядре.Вот почему вы видите, что оба ядра заняты, когда вы запускаете один процессорный поток.Это позволяет однопоточным процессам использовать преимущества многоядерных систем, распределяя нагрузку между несколькими ядрами, в зависимости от различной доступности.
Более того, операционные системы позволяют «заблокировать» поток на одном или нескольких ядрах, поэтомуон работает только на указанных ядрах.Это называется маска сходства в Windows.Современное многоядерное программное обеспечение может воспользоваться этим и выделить определенные потоки для определенных ядер, чтобы оптимизировать свою рабочую нагрузку.Игры делают это для выделения ИИ для одного ядра, для рендеринга, например, для другого.Для того, чтобы сделать это эффективно, программное обеспечение должно знать, сколько ядер имеет система, а также создавать и назначать потоки на основе этого числа.
Аналогично, структуры параллельного программирования, такие как OpenMP, подсчитывают ядра для эффективного распараллеливания операций.Они создают столько потоков, сколько число ядер в системе, чтобы получить оптимальную производительность для физического параллелизма.
Я думаю, что это единственный случай соотношения между количеством ядер и числом потоков.