Os encadeamentos do mesmo processo podem ser executados ao mesmo tempo, em sistemas multicore?

0

Eu procurei na web e as respostas que encontrei foram provisórias. Ou seja, as pessoas achavam que isso é o que acontece, mas não tinham certeza.

Supondo que as devidas precauções foram tomadas para sincronizar e evitar colisões, os threads do mesmo processo podem ser executados ao mesmo tempo em sistemas multicore?

A razão pela qual estou perguntando é que estou projetando uma linguagem para fazer o autothreading. Ou seja, fazer com que o computador decida quando e onde o encadeamento deve ocorrer. Mas se todos os threads de um processo só puderem ser divididos em tempo e não forem executados simultaneamente, o autothreading não criará uma melhoria na velocidade.

    
por shawnhcorey 12.09.2014 / 21:48

3 respostas

1

Sim, o objetivo de várias CPUs ou núcleos de CPU é que todos eles podem fazer coisas diferentes ao mesmo tempo; caso contrário, por que alguém faria um sistema multi-core se todos os outros núcleos tivessem que esperar que o primeiro terminasse sua fatia?

É também por isso que os primitivos de sincronização, como spinlocks, exclusões mútuas, barreiras & c. existem e são necessários em primeiro lugar, o que é comprovado pelas centenas de bugs encontrados no software real (kernels e programas multi-threaded regulares) que foram causados por múltiplos threads acessando as mesmas estruturas de dados de uma só vez depois de esquecê-los .

    
por 12.09.2014 / 22:33
1

Sim, eles podem. Na maioria dos sistemas operacionais eu estou ciente e, certamente, no Windows e no Linux, não há nada que diga que apenas um dos threads de um processo possa ser executado por vez. Na verdade, o agendador do Windows presta pouca atenção a "de qual processo veio um thread?" na tomada de decisões. Em um sistema com núcleos n , os encadeamentos n podem ser executados literalmente ao mesmo tempo. Não importa se são todos de um processo, de quatro processos diferentes ou de qualquer combinação.

Para o Windows, você pode demonstrar isso facilmente com o aplicativo "cpustres". Você pode encontrar isso no "Windows Internals book tools", um pacote distribuído por Mark Russinovich no site de ferramentas da sysinternals. Coloque o seu sistema o mais silencioso possível e, em seguida, use cpustres para criar dois threads e definir seu "nível de atividade" no máximo. Em seguida, verifique os gráficos de tempo da CPU no Gerenciador de Tarefas. Ou use o Process Explorer para observar o tempo de CPU dos dois threads.

O livro Windows Internals inclui informações completas sobre como o agendador (e não o "agendador de tarefas", o agendador de threads) faz seu trabalho. É uma leitura longa, mas vale a pena. A versão mais recente desse livro cobre o Windows 7, mas não houve grandes mudanças nessa área desde então.

    
por 16.09.2015 / 08:42
0

Eu também estava procurando por essa resposta, específica para processadores Intel. No caso da Intel, a visão geral da tecnologia Hyper-threading deixa isso bem claro:

Intel® Hyper-Threading Technology (Intel® HT Technology) uses processor resources more efficiently, enabling multiple threads to run on each core

Portanto, sim! Os threads de um único processo serão distribuídos entre os vários núcleos e serão executados em paralelo.

    
por 17.06.2018 / 17:51

Tags