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.