Os processadores foram os componentes de computador que tiveram uma evolução galopante desde seu primeiro modelo até os que encontramos hoje no mercado. Para aumentar a velocidade dos processadores e a dos computadores, diversas tecnologias novas foram desenvolvidas.
Hoje você não precisa procurar muito para encontrar computadores que tenham processadores com mais de um núcleo, ou que possam simular diversos. Porém, as especificações destas máquinas muitas vezes utilizam nomes específicos como Multithread ou Hyper-threading e geram dúvidas sobre seu funcionamento.
O que é Thread?
Em palavras simples, uma thread é um conjunto de tarefas existentes em um ou mais programas, executadas ao mesmo tempo pelo processador. Por exemplo, você não precisa parar de ouvir música enquanto utiliza um editor de texto, muito menos fechar uma janela de seu navegador para imprimir uma imagem. Agora pense em diversas tarefas dentro de um único processo (como a emissão de sons e imagens ao mesmo tempo em um jogo) e você tem threads.
Uma Thread acontece quando um programa precisa resolver duas ou mais tarefas concorrentes (e em andamento). Threads não são processos, estando contidas dentro de processos. Pode haver múltiplas threads dentro de um mesmo processo (ao menos uma sempre existe) e também é possível dividir recursos do computador (como memória e arquivos abertos, por exemplo), enquanto processos não podem fazê-lo.
Nos computadores cujo processador possui um núcleo, as threads são processadas de maneira, aparentemente, simultânea, pois a mudança entre uma e outra é feita de maneira muito rápida. Nos computadores cujo processador tem mais do que um núcleo, as threads são efetivamente realizadas de forma simultânea.
Resumindo...
Normalmente, um processo (de qualquer programa) é dividido em várias linhas, as quais possuem ordens específicas. Cada linha pode ser lida e processada separadamente pelo processador. Estas linhas são o que chamamos de Threads. Evidentemente, para que as Threads possam ser executadas ao mesmo tempo, o computador precisa de duas coisas: um sistema capaz de realizar esta divisão de threads e um processador capaz de executar várias threads.
Multithread
Multithreading é a capacidade que o sistema operacional possui de executar várias threads simultaneamente sem que uma interfira na outra. Estas threads compartilham os recursos do processo, mas são capazes de ser executadas de forma independente. Para possuir processamento multithread “real”, os processadores precisam ser capazes de atender duas ou mais threads ao mesmo tempo e não simular este efeito, atendendo-as uma por vez em um curto período de tempo.
A maior vantagem trazida com a execução multithread é permitir que os computadores com múltiplos núcleos de processamento possam aproveitar todo o seu potencial e operar de forma mais rápida. Apenas para ilustrar, nos computadores sem este tipo de suporte, quando o processo principal toma muito tempo, a aplicação inteira parece travar.
SuperThreading
Esta tecnologia foi desenvolvida a partir da observação de que algumas vezes o processador era deixado ocioso enquanto executava as instruções de uma thread (nem todo processo requisita toda a capacidade do processador). O objetivo principal era aproveitar este período de ociosidade para a execução de instruções de outra thread.
Na execução SuperThreading o processador pode executar instruções de threads diferentes para cada ciclo de processamento. Entretanto, quando um destes ciclos não está mais sendo utilizado por determinada thread, é aproveitado para executar outra que esteja pronta.
Hyper-threading
Hyper-threading ou Simultaneous multithreading (SMT), basicamente, seria uma espécie de evolução da tecnologia SuperThreading, porém sem a limitação de que todas as instruções executadas em um mesmo ciclo de processamento sejam da mesma thread.
A tencologia de Hyper-thread permite que as threads sejam executadas em paralelo (paralelismo) dentro de cada núcleo de processador existente no computador. Este tipo de processamento aproveita de forma mais eficiente o uso dos recursos dos processadores e melhora ainda mais a performance multithread dos programas. Na imagem abaixo você pode conferir a presença da tecnologia Hyper-threading (HT) nos processadores Pentium 4.
Como um exemplo atual, poderíamos utilizar os processadores Core i7 da Intel, que apesar de possuírem quatro núcleos físicos, simulam o funcionamento de oito.
Hoje você não precisa procurar muito para encontrar computadores que tenham processadores com mais de um núcleo, ou que possam simular diversos. Porém, as especificações destas máquinas muitas vezes utilizam nomes específicos como Multithread ou Hyper-threading e geram dúvidas sobre seu funcionamento.
O que é Thread?
Em palavras simples, uma thread é um conjunto de tarefas existentes em um ou mais programas, executadas ao mesmo tempo pelo processador. Por exemplo, você não precisa parar de ouvir música enquanto utiliza um editor de texto, muito menos fechar uma janela de seu navegador para imprimir uma imagem. Agora pense em diversas tarefas dentro de um único processo (como a emissão de sons e imagens ao mesmo tempo em um jogo) e você tem threads.
Uma Thread acontece quando um programa precisa resolver duas ou mais tarefas concorrentes (e em andamento). Threads não são processos, estando contidas dentro de processos. Pode haver múltiplas threads dentro de um mesmo processo (ao menos uma sempre existe) e também é possível dividir recursos do computador (como memória e arquivos abertos, por exemplo), enquanto processos não podem fazê-lo.
Nos computadores cujo processador possui um núcleo, as threads são processadas de maneira, aparentemente, simultânea, pois a mudança entre uma e outra é feita de maneira muito rápida. Nos computadores cujo processador tem mais do que um núcleo, as threads são efetivamente realizadas de forma simultânea.
Resumindo...
Normalmente, um processo (de qualquer programa) é dividido em várias linhas, as quais possuem ordens específicas. Cada linha pode ser lida e processada separadamente pelo processador. Estas linhas são o que chamamos de Threads. Evidentemente, para que as Threads possam ser executadas ao mesmo tempo, o computador precisa de duas coisas: um sistema capaz de realizar esta divisão de threads e um processador capaz de executar várias threads.
Multithread
Multithreading é a capacidade que o sistema operacional possui de executar várias threads simultaneamente sem que uma interfira na outra. Estas threads compartilham os recursos do processo, mas são capazes de ser executadas de forma independente. Para possuir processamento multithread “real”, os processadores precisam ser capazes de atender duas ou mais threads ao mesmo tempo e não simular este efeito, atendendo-as uma por vez em um curto período de tempo.
A maior vantagem trazida com a execução multithread é permitir que os computadores com múltiplos núcleos de processamento possam aproveitar todo o seu potencial e operar de forma mais rápida. Apenas para ilustrar, nos computadores sem este tipo de suporte, quando o processo principal toma muito tempo, a aplicação inteira parece travar.
SuperThreading
Esta tecnologia foi desenvolvida a partir da observação de que algumas vezes o processador era deixado ocioso enquanto executava as instruções de uma thread (nem todo processo requisita toda a capacidade do processador). O objetivo principal era aproveitar este período de ociosidade para a execução de instruções de outra thread.
Na execução SuperThreading o processador pode executar instruções de threads diferentes para cada ciclo de processamento. Entretanto, quando um destes ciclos não está mais sendo utilizado por determinada thread, é aproveitado para executar outra que esteja pronta.
Hyper-threading
Hyper-threading ou Simultaneous multithreading (SMT), basicamente, seria uma espécie de evolução da tecnologia SuperThreading, porém sem a limitação de que todas as instruções executadas em um mesmo ciclo de processamento sejam da mesma thread.
A tencologia de Hyper-thread permite que as threads sejam executadas em paralelo (paralelismo) dentro de cada núcleo de processador existente no computador. Este tipo de processamento aproveita de forma mais eficiente o uso dos recursos dos processadores e melhora ainda mais a performance multithread dos programas. Na imagem abaixo você pode conferir a presença da tecnologia Hyper-threading (HT) nos processadores Pentium 4.
Veja que o Windows reconhece dois núcleos num processador que tem apenas um núcleo físico
Para deixar um pouco mais claro, pode-se dizer que um único processador com tecnologia hyper-threading habilitada é tratado pelo sistema operacional como dois processadores ao invés de apenas um. Assim sendo, um único processador físico poderia ser tratado pelo Sistema como dois processadores virtuais dividindo tarefas entre eles.Como um exemplo atual, poderíamos utilizar os processadores Core i7 da Intel, que apesar de possuírem quatro núcleos físicos, simulam o funcionamento de oito.
Nenhum comentário:
Postar um comentário