Então, eu tenho tentado google para esta resposta, mas não consigo encontrar uma resposta técnica direta para a pergunta. (Ou se o fizesse, era de uma maneira confusa)
Então, digamos que você tenha um programa / jogo que use 2 threads e apenas 2 threads. Com uma CPU quad-core e hyper threading, saberá ainda usar dois núcleos PHYSICAL em vez de apenas 2 threads, usando 50% da CPU em vez de 25% dela? O Hyper-threading causa todos os problemas deste tipo, usando artificialmente metade do que realmente poderia / deveria fazer? Como o Windows sabe como lidar com tudo isso?
Obrigado! Desculpe se a maneira que eu fiz a pergunta foi estranha, apenas tentando ser claro e conciso.
:D
Respostas:
Sim, faz o que você quer. O Windows sabe qual processador lógico está em qual núcleo. Ele usará apenas um "processador lógico" por núcleo até que você tenha mais encadeamentos que desejem executar ao mesmo tempo que os núcleos.
("Processador lógico" é um nome que o Windows usa internamente para "algo que pode executar um thread". Se você não tiver o HT ativado, haverá um LP por núcleo. Se você tiver o HT ativado, haverá dois LPs por núcleo. Isso nos permite sempre simplesmente falar sobre "processadores lógicos" em vez de ter que constantemente qualificar as coisas.
O algoritmo exato para escolher "onde executar um thread" é descrito em Internals do Windows por Salomão, Russinovich e Ionescu. É uma descrição demorada, incluindo muitos "casos de borda", como núcleos estacionados, máquinas NUMA (aquelas com dois ou mais pacotes de CPU físicos, cada um com seu próprio banco de RAM), etc.
Mas, sim: o Windows tenta manter um LP em cada núcleo inativo, até que haja mais encadeamentos que desejem executar do que núcleos.
fonte