Início > Python > Python – Threads x Process

Python – Threads x Process

Multi Python

Creio que muitos aqui devem já ter desenvolvido com Threads, e muito já devem ter pensado que Threads melhoram o desempenho de um software. Mas, gostaria de dizer que Threads não melhoram efetivamente o desempenho de um software. As Threads podem ajudar a controlar melhor seu software, mas caso você tenha um problema muito grande e você quer dividir este problemas para resolve-lo paralelamente as Threads não vão ajudar. Eu mesmo fiz alguns testes e vi que não há nenhuma diferença entre um programa linear chamando uma função atrás da outra e um programa que chama várias Threads ao mesmo tempo. Isso acontece pois as Threads de um determinado programa, por padrão, é executada dentro do mesmo processo. Isso acaba limitando todo o processamento dentro do mesmo processo. Então se você tiver uma ou vária threads trabalhando juntas para resolver o mesmo problema o tempo será o mesmo. Mas o Python 3.1 traz uma novidade, uma nova classe chamada multiprocessing. Está classe ajuda a melhorar o tempo de processamento de um determinado software.

Vamos supor que você tem uma lista de intervalos de números muito grandes, e você tem uma máquina Quad-Core e você quer usar o máximo destes quatro núcleos. A melhor forma é usar a classe multiprocessing e não a classe threading. Pois a multiprocessing irá criar um novo processo para cada chamada da função que você deseja executar ele irá criar um novo processo e o S.O. será responsável  por gerenciar estes processo, e logicamente os processos serão divididos entre os núcleos!

Mas como fazer isso. Irei colocar dois arquivos anexados neste post. Um utilizando Threads e outro Processos. E este sistema mostra quanto tempo demora entre iniciar o programa e finalizar o ultimo processo. Se você tiver um computador com mais de um núcleo. Veja a diferença no resultado. Mas se seu computador for Mono-Core o resultado será basicamente o mesmo… Irá até demorar um pouco mais o de Processos pois há uma perda de processamento para criar os processos. Bom quem quiser ver o resultado mesmo vejam em sua lista de processos a diferença. Usando o programa com Threads você verá que a memória do Programa com Threads irá aumentar. No caso dos multi-processos você verá a lista de processos aumentar. Bom vejam com mais detalhes nos arquivos: Processos Thread (Utiliza Python 3.1)

Categories: Python Etiquetas:,
  1. 04/03/2011 ás 14:00 | #1

    Bacana, muita gente faz essa confusão e não entende que um programa com multithreading tende a ser mais lento por causa do escalonamento em algumas maquinas.
    Mas tenho uma observação a fazer… os processadores da intel que tem o HyperThreading conseguem executar duas threads simultâneas por núcleo, alguns sistemas até leem esses processadores com o dobro de núcleos físicos, ou mostram núcleos virtuais, se vocé quiser o melhor resultado mesmo você pode criar processos com duas threads em cada um, num i7 por exemplo voce teria 4 processos rodando duas Threads cada simultaneamente… fica lindo.

  1. No trackbacks yet.

Deixar um comentário

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Modificar )

Imagem do Twitter

You are commenting using your Twitter account. Log Out / Modificar )

Facebook photo

You are commenting using your Facebook account. Log Out / Modificar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.