Eu gostaria de experimentar threads em um processador com vários núcleos, por exemplo, para criar um programa que usa dois threads diferentes que são executados por dois núcleos de processador diferentes.
No entanto, não está claro para mim em que nível os threads são alocados para os diferentes núcleos. Eu posso imaginar os seguintes cenários (dependendo do sistema operacional e da implementação da linguagem de programação):
- A alocação de encadeamentos é gerenciada pelo sistema operacional. Os threads são criados usando chamadas do sistema OS e, se o processo for executado em um processador com vários núcleos, o sistema operacional automaticamente tenta alocar / agendar segmentos diferentes em núcleos diferentes.
- A alocação de encadeamentos é gerenciada pela implementação da linguagem de programação. A alocação de encadeamentos em núcleos diferentes requer chamadas especiais do sistema, mas as bibliotecas de encadeamentos padrão da linguagem de programação tratam disso automaticamente quando eu uso a implementação de encadeamento padrão para essa linguagem.
- A alocação de encadeamentos deve ser programada explicitamente. No meu programa, tenho que escrever um código explícito para detectar quantos núcleos estão disponíveis e alocar segmentos diferentes para diferentes núcleos usando, por exemplo, funções de biblioteca.
Para tornar a pergunta mais específica, imagine que eu escrevi meu aplicativo multithread em Java ou C ++ no Windows ou Linux. Meu aplicativo verá e usará magicamente vários núcleos quando executado em um processador com vários núcleos (porque tudo é gerenciado pelo sistema operacional ou pela biblioteca de threads padrão) ou tenho que modificar meu código para estar ciente dos vários núcleos ?