O SO explora vários núcleos

1

Sei que mais núcleos nem sempre são melhores e que a maioria dos aplicativos é de thread único, mas o SO usa os núcleos adicionais? Por exemplo, suponha um aplicativo como um forcer brute de dicionário. Seria executado quatro instâncias separadas deste (em um 1/4 separado do dicionário) em uma rede de processador quad-core os mesmos benefícios se o programa foi realmente multithread? Essencialmente, o sistema operacional permitiria que todas as quatro instâncias funcionassem de uma vez só sem antecipar?

Eu tenho a tendência de executar muitos aplicativos independentes de uma só vez (o Firefox tem várias guias, office, chat, ferramentas de desenvolvimento, jogos).

    
por user974896 09.01.2013 / 23:00

2 respostas

2

Geralmente, sim, o SO distribuiria 4 instâncias de um programa em 4 núcleos se os núcleos estivessem disponíveis para uso (ou seja, outros programas não os estão usando). Isso poderia lhe dar benefícios semelhantes em comparação a ter 4 threads, exceto para sobrecarga potencial (por exemplo, 4 threads provavelmente compartilhariam uma cópia de qualquer dicionário carregado, enquanto 4 processos provavelmente carregariam cópias separadas do dicionário).

    
por 09.01.2013 / 23:05
1

Para utilizar todos os núcleos disponíveis, você precisa de ambos (a) suporte do sistema operacional e (b) uma carga de trabalho de aplicativo que pode aproveitar vários núcleos. O suporte do sistema operacional é um dado para todos os sistemas operacionais modernos, portanto, é necessário saber se a carga de trabalho do seu aplicativo pode aproveitar vários núcleos.

Se você estiver executando vários aplicativos simultaneamente, poderá se beneficiar de vários núcleos. Se vários programas estiverem tentando ser executados ao mesmo tempo, o sistema operacional os agendará em vários núcleos.

Se você estiver usando apenas um único aplicativo por vez, depende do aplicativo se vários núcleos o ajudarão. Em particular, depende se o aplicativo é gravado para ser multi-threaded ou single-threaded. Um aplicativo single-threaded faz apenas uma coisa de cada vez e, portanto, só pode usar um único núcleo. Um aplicativo multi-thread cria vários threads para fazer várias coisas ao mesmo tempo, permitindo que o sistema operacional agende cada thread em um núcleo diferente e, potencialmente, permitindo acelerações em um processador multicore.

Os aplicativos precisam ser especialmente projetados e escritos para usar vários encadeamentos e aproveitar vários núcleos, e muitos aplicativos comuns não se beneficiam de vários núcleos - mas alguns deles. Por exemplo, o Photoshop é escrito de forma que, se você solicitar uma tarefa computacionalmente dispendiosa, a tarefa será dividida em partes menores e distribuídas entre vários segmentos, para que possam ser executadas em vários núcleos. Isso exigiu uma programação especial dos desenvolvedores do Photoshop e exigiu muito esforço extra dos desenvolvedores, portanto, muitos ou muitos aplicativos não se preocuparam em usar esse estilo de programação e não se beneficiarão muito de uma máquina com vários núcleos - mas alguns o farão.

Dado que você tende a executar muitos programas independentes ao mesmo tempo, provavelmente verá pelo menos alguns benefícios de um processador multi-core.

    
por 09.01.2013 / 23:15