Introdução
Neste artigo darei uma introdução à programação com múltiplas threads. As threads podem prover muito mais liberdade ao programador e acelerar muitas tarefas demoradas se usadas de forma correta.
Porém para compreendermos como elas funcionam precisaremos entender alguns conceitos, começando pela administração de processos por parte da CPU.
Entendo como a CPU trabalha
Para podermos implementar as threads é necessário entendermos primeiramente como a CPU administra seus processos.
A CPU consegue executar apenas um processo por vez, tal afirmação parece inconcebível haja vista que é possível, tranquilamente, jogar um videogame enquanto se escuta música no navegador. O que ocorre na realidade é a ilusão de que os processos estão sendo executados simultaneamente devido a um fenômeno chamado multiplexing.
Para entender o multiplexing vamos supor que seu computador possui três processos ativos: A(navegador), B(jogo), C(calculadora), para que o usuário possa usufruir dos três ao mesmo tempo, a CPU executa cada ora um pouco de um processo.
Há uma fila indicando qual processo deve ser executado a cada ora, o SO administra quanto tempo de processamento cada um receberá, até puxar o outro da fila.
Para clarificar as coisas vamos usar uma analogia:
Vamos supor que eu precisasse ler três livros, porém é humanamente impossível ler três livros ao mesmo tempo, logo leio o livro A durante 10 segundos, depois o B por 7 segundos, depois o C por 9 segundos, depois volto ao A e o ciclo continua. Por estar lendo cada ora um pouco de um, causarei a impressão de estar lendo os três simultaneamente.
Threads
Threads são a forma de um processo se subdividir, podendo assim, um processo executar mais de uma função concorrentemente.
Para exemplificar, vamos supor um vírus disfarçado de um jogo, a priori, um jogo inofensivo, porém enquanto você o joga este destrói o seu PC. Nesse caso há duas threads em ação, uma executa o jogo e outra as funções de destruição.
As threads são iguais processos, são concorrentes e não simultâneas. A diferença ente processos e threads consiste no fato de o primeiro disputar tempo de processamento da CPU, enquanto o segunda pertence a um processo, disputando assim o tempo de processamento dedicado ao processo.
Voltemos às analogias dos livros:
Leio 7 segundos de A, depois leio 5 segundos de B, depois 9 segundos de C, porém dessa vez vou usar threads em C. Tenho 9 segundos para dedicar à C, porém quero exercer duas funções: ler e fazer anotações sobre C nesses 9 segundos. Porém quero executar essas funções "simultaneamente", logo vou recorrer à mesma técnica usada com os processos: vou ler 1 segundo, escrever 1 segundo, ler 1 segundo, escrever 1 segundo... até o fim dos 9 segundos que tenho. Isso causa a impressão de que li e escrevi simultaneamente.
C representa um processo que possui 9 segundos (esse tempo é milhares de vezes menor na realidade) de processamento, o ato de ler C é a execução de uma thread pertencente ao processo C e o ato de escrever, outra execução de uma thread também pertencente à C.
Concluindo: a CPU dedica um tempo de processamento a um processo, esse tempo pode ser distribuído entre as threads deste processo para exercer várias funções distintas dentro dele.
Se ainda está meio confuso, vamos à prática para clarear as coisas.
1. Introdução
2.
3.
4.
Nenhum comentário foi encontrado.