O sistema operacional explora vários núcleos

O sistema operacional explora vários núcleos

Eu sei que mais núcleos nem sempre são melhores e que a maioria dos aplicativos são de thread único. No entanto, o sistema operacional faz uso de núcleos adicionais? Por exemplo, suponha um aplicativo como uma força bruta de dicionário. A execução de quatro instâncias separadas disso (em um 1/4 separado do dicionário) em um processador quad-core teria os mesmos benefícios se o programa fosse realmente multithread? Essencialmente, o sistema operacional permitiria que todas as quatro instâncias fossem executadas de uma só vez, sem preempção?

Costumo executar muitos aplicativos independentes ao mesmo tempo (firefox com várias guias, escritório, bate-papo, ferramentas de desenvolvimento, jogos).

Responder1

Geralmente, sim, o sistema operacional 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 estivessem usando). Isso poderia oferecer benefícios semelhantes a ter 4 threads, exceto pela possível sobrecarga (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).

Responder2

Para usar todos os núcleos disponíveis, você precisa (a) do suporte do sistema operacional e (b) de uma carga de trabalho do aplicativo que possa aproveitar as vantagens de vários núcleos. O suporte do sistema operacional é garantido para todos os sistemas operacionais modernos, portanto, tudo se resume a saber se a carga de trabalho do seu aplicativo pode tirar proveito de 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 irá agendá-los em vários núcleos.

Se você estiver usando apenas um aplicativo por vez, dependerá do aplicativo se vários núcleos irão ajudá-lo. Em particular, depende se o aplicativo foi escrito para ser multithread ou single-thread. Um aplicativo de thread único faz apenas uma coisa por vez e, portanto, só pode usar um único núcleo. Um aplicativo multithread 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 threads e aproveitar as vantagens de vários núcleos, e muitos aplicativos comuns não se beneficiam de vários núcleos – mas alguns se beneficiam. Por exemplo, o Photoshop foi escrito para que, se você solicitar que ele execute uma tarefa computacionalmente cara, ele dividirá a tarefa em partes menores e distribuirá essas partes entre vários threads, para que possam ser executados em vários núcleos. Isso exigiu programação especial dos desenvolvedores do Photoshop e exigiu muito esforço extra dos desenvolvedores, portanto, muitos ou a maioria dos aplicativos não se preocuparam em usar esse estilo de programação e não se beneficiarão muito de uma máquina com múltiplos 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.

informação relacionada