Qual é a vantagem de um processo com mais de uma thread em relação aos processos de thread única?

• A criação e terminação duma thread nova é, em geral, mais rápida do que a criação e terminação dum processo novo;

• A comutação de contexto entre duas threads é mais rápida do que entre dois processos;

• A comunicação entre threads é mais rápida do que a comunicação entre processos - porque as threads compartilham tudo: espaço de endereçamento, variáveis globais etc;

 • Multi-programação usando o modelo de threads é mais simples e mais portável do que multi-programação usando múltiplos processos. 

Implementação de Threads

Existem duas abordagens principais para a implementação de threads.

  •Kernel-level Threads -- System Calls.

  •User-Level Threads -- Thread Libraries. 

Existem vantagens e desvantagens em ambos os casos. 

Também existe sistemas operativos que implementam threads usando uma abordagem mista dos dois métodos principais, por exemplo Solaris da Sun. 

Implementação de Threads no Kernel (KLT) Vantagens e Desvantagens

Vantagens:

 • O kernel pode simultaneamente escalonar várias threads do mesmo processo em vários processadores (reais ou virtuais)

 • As rotinas do próprio kernel podem aproveitar threads. Desvantagens:

  • A troca entre threads implica acções do kernel e isto tem um custo que pode ser significativo.

Implementação de Threads no User Space Vantagens e Desvantagens de ULT (User Level Threads)

Vantagens:

• A troca de Threads não envolve o kernel

    – Não há o custo adicional de execução do kernel

    – O OS não precisa de oferecer apoio para threads

    – Portanto é mais simples.

• Escalonamento pode ser específico para uma aplicação

    – Uma biblioteca pode oferecer vários métodos de escalonamento portanto uma aplicação poderá escolher o algoritmo melhor para ele.

• ULTs podem executar em qualquer SO

     – As bibliotecas de código são portáveis 

Desvantagens:

 • Muitas das chamadas ao sistema são “bloqueantes” e o kernel bloqueia processos

      – Neste caso todos as threads dum processo podem ser bloqueados.

• O kernel vai atribuir o processo a apenas um CPU portanto duas threads dentro do mesmo processo não podem executar simultaneamente numa arquitectura com múltiplas processadores.

O que s�o Threads?

Cada programa, ou processo, possui normalmente um fluxo de controle. Assim o programa � executado seq�encialmente passo a passo com seu �nico fluxo de controle. � nesse ponto que entram as threads, com threads podemos ter mais de um �nico fluxo de controle em nosso aplicativo. Assim o nosso aplicativo agir� como se tivessem v�rios aplicativos com partes de seu c�digo atuando em paralelo no sistema. Threads s�o, portanto, entidades escalonadas para executarem na CPU, por isso a no��o de paralelismo, pois as threads concorrer�o pelo processador juntamente com mais threads que tiverem no programa, ou concorrer� apenas com o fluxo do programa.

Threads permitem que m�ltiplas execu��es ocorram no mesmo ambiente do aplicativo com um grande grau de independ�ncia uma da outra, portanto, se temos muitas threads executando em paralelo no sistema � an�logo a m�ltiplos aplicativos executando em paralelo em um computador.

Devemos salientar que o termo multithreading nada mais � do que um aplicativo que possui m�ltiplas threads nesse mesmo aplicativo. Tamb�m ressaltamos que threads compartilham o mesmo espa�o de endere�amento do aplicativo em execu��o, portanto, nota-se que ao inv�s de criarmos um novo aplicativo para fazer uma determinada tarefa para o nosso aplicativo, � muito mais barato apenas criar uma thread para esse fim, visto que criar um aplicativo requer muito processamento por parte do processador, al�m de alocar mais mem�ria para o novo aplicativo.

O Uso de Threads

Agora que sabemos o que s�o threads, resta sabermos para que elas servem. Pois bem, a principal raz�o para existirem as threads � termos a possibilidade de ocorrem muitas atividades ao mesmo tempo em nossa aplica��o. Al�m disso, podemos observar que o nosso modelo de programa��o se torna muito mais simples � medida que decompomos a nossa aplica��o em m�ltiplos threads que executam quase em paralelo, ou mesmo em paralelo no caso de termos mais de uma CPU.

Quando falamos em desempenho, falamos em uma CPU o menos tempo poss�vel ociosa, ai novamente que entram as threads. Se pegarmos como exemplo um aplicativo qualquer que faz bastante uso do disco r�gido, ou qualquer dispositivo de E/S, para algum fim como ler um arquivo em disco, pesquisar nomes em um arquivo, ou armazenar nomes em um arquivo, podemos tornar nossa aplica��o mais �til e r�pida se usamos threads, pois enquanto uma opera��o de E/S fosse feita uma thread poderia estar usando o processador para algum fim ao aplicativo.

Exemplificando Threads

Para entendermos melhor as threads nada melhor que um exemplo. Consideramos, por exemplo, um processador de textos. Suponhamos que estamos escrevendo um artigo em um processador de textos, para um processador de textos considerado no m�nimo bom, ter�amos que ter duas threads, uma delas seria respons�vel por interagir com o usu�rio, e a outra thread seria respons�vel por corrigir o texto, realizando isso em segundo plano. Assim enquanto o usu�rio digitaria o seu texto o processador de textos iria processando o texto, enquanto ap�s isso o segundo thread seria respons�vel por corrigir os textos que iriam sendo digitados pelo usu�rio caso estivessem errados. Que tal se ainda colocassem um terceiro thread que seria respons�vel por salvar o documento de tempo em tempo para que caso venha a faltar energia o usu�rio n�o perdesse o documento.

Essa � a id�ia de threads, onde temos a nossa aplica��o dividida em pequenos m�dulos funcionais, fazendo da aplica��o ainda mais completa.

Conclus�o

No artigo de hoje voc� aprendeu sobre threads, um assunto que � muito importante e suportada em todas as atuais linguagens de programa��o. Threads � um assunto ainda mais extenso e voc� poder� procurar ainda bastante coisa sobre este assunto, al�m disso, � uma pr�tica muito importante para voc� adotar em seus programas, pois como foi dito anteriormente com thread podemos ter ganho de performance e tornar nosso programa ainda mais modular.

Confira outros conte�dos:

Qual é a vantagem de um processo com mais de uma thread em relação aos processos de thread única?

Por Higor Em 2007

Quais são as vantagens dos threads em relação aos processos?

A comunicação entre threads é mais rápida do que a comunicação entre processos - porque as threads compartilham tudo: espaço de endereçamento, variáveis globais etc; Multi-programação usando o modelo de threads é mais simples e mais portável do que multi-programação usando múltiplos processos.

Quais são as diferenças fundamentais entre um processo e uma thread?

Resumindo: Um processo é um programa em execução, somado ao seu contexto. Threads: É um processo com múltiplos fluxos de controle.

Qual a relação entre processos e threads?

A diferença básica entre threads e processos é: um processo não compartilha um mesmo recurso do computador simultaneamente com outro processo, enquanto que uma thread pode compartilhar um mesmo recurso simultaneamente com outras threads (dentro do mesmo processo).

Qual é a maior vantagem de se implementar threads no espaço de usuário?

A maior vantagem de implementar threads no espaço do usuário é que elas são escalonadas pelo programador, tendo a grande vantagem de cada processo usar um algoritmo de escalonamento que melhor se adapte a situação, o sistema operacional neste tipo de thread não faz o escalonamento, em geral ele não sabe que elas ...