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.815 ]

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

Executando sua aplicação Kylix fora do Kylix

XL - Ferramenta de gerenciamento Xen - Parte I

Instalação de um servidor de mensagens instantâneas Openfire na sua rede com clientes Microsoft Windows e cliente Jabber Exodus

Instalando o CVS no Ubuntu Linux

Pebrot, MSN messenger no terminal

Leitura recomendada

Python - Threads

Redes definidas por Software com Mininet e POX - Criando meu primeiro Controlador

Monitorando produtos no ML com Python 3 via BeautifulSoup

Pydev - Preparando o Eclipse para o Python

Interagindo com servidores HTTP com Python

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts