Um processador multi-core pode executar vários processos ao mesmo tempo?

9

Entendo que um processador com vários núcleos pode executar vários threads do mesmo processo ao mesmo tempo usando seus diferentes núcleos.
Também pode executar vários processos ao mesmo tempo (cada núcleo executando um processo diferente)?

NimsDotNet
fonte

Respostas:

14

No que diz respeito ao sistema operacional e aos aplicativos, cada núcleo é um processador separado e está sujeito às mesmas regras de afinidade que os processadores múltiplos.

O processador em que o processo é executado (seja real, principal ou hiperencadeado) depende inteiramente do sistema de agendamento do sistema operacional. É esse sistema de agendamento (influenciado pelas configurações de afinidade ) que decide onde um processo deve ser executado e quando. Processos e threads podem alternar entre processadores e núcleos à vontade, conforme o planejador entender.

Majenko
fonte
7

Pelo meu conhecimento limitado de sistemas operacionais, acredito que todo processo tem pelo menos um encadeamento, e são esses encadeamentos que são agendados, não os próprios processos. O processo simplesmente contém informações sobre o programa e os threads que ele definiu em execução. Dessa maneira, um único aplicativo encadeado recebe o mesmo tratamento que um aplicativo multithread, mas o aplicativo multithread pode usar melhor os recursos.

Por exemplo, vamos supor que temos dois processos com dois threads cada e um único aplicativo com threads, todos trabalhando duro em um processador de núcleo duplo (ou CPU dupla, não faz diferença aqui)

 Process A
    |_Thread A-1
    |_Thread A-2

 Process B
    |_Thread B-1
    |_Thread B-2

 Process C
    |_Thread C

Cada encadeamento é agendável em todos os núcleos da CPU e a carga é balanceada pelo agendador do SO.

Se, então, configurarmos a afinidade do processador para o Processo B para limitá-lo a uma CPU, todos os threads desse processo também serão vinculados a essa CPU e não serão executados em nenhuma outra CPU. Fazer o mesmo com o Processo C resultará em nenhuma mudança real, pois só pode ser executado em uma CPU por vez.

Mokubai
fonte
2

Resposta curta:

  1. Sim, desde que o SO o suporte.
  2. Atualmente, todos os sistemas operacionais são compatíveis.

Processos e threads (como no multi-threading) são construções no nível do SO. Depois que você obtém um nível baixo o suficiente no agendamento, eles desaparecem e você só tem vários threads de fila de execução para obter tempo de execução.

Mr Alpha
fonte