Да, он делает то, что вы хотите. Windows знает, какой логический процессор и в каком ядре. Он будет использовать только один «логический процессор» на ядро, пока у вас не будет больше потоков, которые будут работать одновременно, чем у вас ядер.
(«Логический процессор» - это имя, которое Windows использует внутренне для «чего-то, что может запустить поток». Если у вас не включен HT, то по одному LP на ядро. Если у вас включен HT, есть два LP на ядро. Это позволяет нам всегда просто говорить о «логических процессорах», а не постоянно оценивать вещи.)
Точный алгоритм выбора «где запустить поток» описан в Windows Internals Соломоном, Руссиновичем и Ионеску. Это длинное описание, включающее в себя множество «крайних случаев», таких как припаркованные ядра, машины NUMA (с двумя или более физическими пакетами ЦП, каждый со своим банком ОЗУ) и т. Д.
Но да: Windows пытается поддерживать один LP в каждом бездействующем ядре, пока не будет запущено больше потоков, чем ядер.