O processador Intel Core i7 possui 4 núcleos físicos, mas cada núcleo tem a capacidade de inserir até 2 threads por vez, mostrando um total de 8 threads no sistema operacional na forma de "CPUs lógicas disponíveis".
Na realidade, um único núcleo pode lidar apenas com um encadeamento por vez, mas possui mecanismos especiais de enfileiramento / tempo / agendamento para permitir que dois encadeamentos estejam em estágios diferentes do "pipeline" ao mesmo tempo. Isso permite que a CPU conclua 2 threads mais cedo do que faria se tratasse apenas um de cada vez. Como os dois threads estão compartilhando o mesmo pipeline, o benefício de desempenho obviamente não será 2x. A maioria dos testes atribui o benefício entre 10% e 50%, dependendo do tipo de instruções que estão sendo executadas.
Em resposta à sua pergunta, se você iniciar 4, 8 ou 16 instâncias do seu programa, todas elas estarão "em execução", mas as instruções para cada uma serão colocadas em fila, dependendo de quantas LINHAS disponíveis. Depois que você ultrapassar o número de NÚMEROS FÍSICOS disponíveis (por exemplo, 5 ou mais), o desempenho será reduzido, pois quaisquer threads além da base 4 compartilharão um núcleo físico da CPU.
Por fim, depois de atingir o limite da capacidade de encadeamento da CPU disponível (exceder 8 threads), o sistema operacional começará a programar / enfileirar instruções para aguardar até que as do pipeline sejam concluídas. Idealmente, você deseja evitar passar por cima dos encadeamentos disponíveis, pois isso pode ter impactos negativos no desempenho e prejudicar o sistema.