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

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

Instalando pacotes no Ubuntu e distros Debian-like

Oracle 9i, Apache e PHP

Compiz no Debian Etch

ROX-Files: Ícones para gerenciadores de janelas que não suportam ícones

Scid vs. PC - O melhor programa para estudar Xadrez no GNU/Linux

Leitura recomendada

Como criar um keylogger em Python

paramiko - Python + SSH

Python - Uma linguagem orientada a objetos

RapidScan - Multi-Tool WEB Vulnerability Scanner

Arduino com Bluetooth e pySerial

  
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