Multithreading refere-se à tarefa geral de executar mais de um thread de execução dentro de um sistema operacional. Multithreading é mais genericamente chamado de "multiprocessamento", que pode incluir vários processos do sistema (um exemplo simples no Windows seria, por exemplo, executar o Internet Explorer e Microsoft Word ao mesmo tempo) ou pode consistir em um processo que tem vários threads dentro dele.
Multithreading (ou devo dizer, multiprocessamento) é um conceito de software . Praticamente qualquer CPU Turing-completo pode executar multithreading, mesmo se o computador tiver apenas um núcleo de CPU e esse núcleo não suportar hyperthreading. Para suportar o multiprocessamento, a CPU irá intercalar a execução de diferentes threads de execução, executando uma, depois outra, depois outra, onde o sistema operacional irá dividir o tempo disponível em “slices” e fornecer uma quantidade de tempo aproximadamente igual a cada thread (o tempo não precisa ser igual, mas normalmente é assim que é feito, a menos que um processo solicite uma prioridade mais alta).
Note que, sempre que houver mais threads de execução de software tentando executar em um dado momento do que há threads de execução hardware (simultâneos) disponíveis, então estes softwares os segmentos serão "intercalados" entre os núcleos disponíveis. No caso de um "uniprocessador" (um núcleo de CPU sem hyperthreading), se você tiver mais de um encadeamento de software, eles serão sempre intercalados. Se você tem uma CPU de 4 núcleos com hyperthreading, são 8 "threads de hardware", o que significa que a CPU pode executar 8 threads simultâneos de execução no mesmo instante, então se você tivesse 8 threads de software tentando executar, todos poderiam ser executados de uma só vez ; mas se você tivesse 9 encadeamentos de software, um dos encadeamentos de hardware teria que intercalar um par de encadeamentos (o par exato de encadeamentos escolhido dependeria da implementação do planejador do sistema operacional).
Por outro lado, o Hyperthreading refere-se a uma tecnologia de hardware muito específica criada pela Intel, que permite que um único núcleo de processador intercale vários encadeamentos de execução de maneira mais eficiente. Em outras palavras, uma CPU com hyperthreading fornecerá um desempenho que é um pouco maior que uma CPU que é a mesma, mas sem hyperthreading, porque a CPU com hyperthreading será capaz de equilibrar simultaneamente duas (às vezes mais, mas hyperthreading é geralmente 2- maneira) linhas de execução em um determinado núcleo. No entanto, o hyperthreading é estritamente mais lento do que ter núcleos físicos completamente separados, porque existem alguns tipos de operações que podem atrapalhar as vantagens de desempenho do hyperthreading, enquanto há menos operações que podem causar esse evento com núcleos completamente separados.Veja o exemplo a seguir, onde "1 core" é assumido para executar exatamente o mesmo em todos os exemplos:
Exemplo 1: 2 núcleos, sem hyperthreading.
Exemplo 2: 4 núcleos, sem hyperthreading.
Exemplo 3: 2 núcleos com hyperthreading.
Exemplo 4: 4 núcleos com hyperthreading.
Neste caso, o Exemplo 4 será sempre o mais rápido. O exemplo 2 pode às vezes ser tão rápido quanto o Exemplo 4, em cargas de trabalho extremamente mal adaptadas para aproveitar as otimizações do hyperthreading.
O Exemplo 3, por outro lado, pode às vezes, em cargas de trabalho em que o hyperthreading é mais vantajoso, ser quase tão rápido quanto o Exemplo 2, embora tenha metade dos núcleos físicos.
O exemplo 1, é claro, será o mais lento de todos os exemplos, mas às vezes pode ser tão rápido quanto o Exemplo 3, ao executar uma carga de trabalho pouco adequada ao hyperthreading.
Em benchmarks do mundo real com CPUs modernas da Intel, normalmente descobrimos que o hyperthreading resulta, em geral, 20% a 40% de melhoria no desempenho em comparação com o hyperthreading (com o caso "sem hyperthreading" sendo comparado com o hyperthreading recurso no BIOS). Ocasionalmente haverá cargas de trabalho onde a desativação do hyperthreading mostra uma vantagem de desempenho, mas essas cargas de trabalho podem ser raras no uso real. Mas, se eu tivesse uma escolha entre 4 núcleos com hyperthreading ou 8 núcleos, assumindo que cada núcleo em si tenha o mesmo desempenho, eu escolheria o processador de 8 núcleos toda vez.