Introdução a Threads e como implementá-las em Python
Explicação introdutória do que são as threads e como implementá-las em Python.
[ Hits: 12.853 ]
Por: Perfil removido em 30/10/2018
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.
Próxima página
Páginas do artigo
1. Introdução
2.
Implementação em Python - Primeiro método
3.
Implementação em Python - Segundo método
4.
Coordenando threads concorrentes
Outros artigos deste autor
TCollection e Generics no Free Pascal - Uma breve visão sobre lista de objetos com o Lazarus
GPT - Guid Partition Table
Importando e-mails do MS Outlook para o Evolution ou Kmail
Outros recursos no OpenOffice: colunas, fundo e bordas
Procurando software para gerenciar armazenamento... Pensou FreeNAS!
Leitura recomendada
RapidScan - Multi-Tool WEB Vulnerability Scanner
Monitorando produtos no ML com Python 3 via BeautifulSoup
Programe em Python no jogo Minecraft com seu filho ou sozinho
Criando Speed Test com Python
Reconhecimento de placas de veículos com OpenALPR
Comentários
Nenhum comentário foi encontrado.