[SP-pm] threads

Solli Honorio shonorio em gmail.com
Quarta Maio 3 13:03:40 PDT 2006


>
> Solli, aproveitando o ensejo... em que situações é
> recomendável usar threads em Perl? Por exemplo,
> existem soluções alternativas como usar fork e os
> diversos módulos do POE: qual a diferença principal
> entre essas opções?
>
> Eu recomendo muito cuidado com a utilização de threads em qualquer
linguagem de programação, e em Perl não é diferente. O primeiro problema na
programação com thread está relacionado com a necessidade de codificação
extra para o gerenciamento das threads, e o segundo maior problema está
relacionado com a enorme dificuldade de depuração do programa com as
threads.

A principalmente recomendação da utilização de threads é quando você possue
pedaços de códigos que podem ser executados independemente dos demais. Um
exemplo seria alguma coisa de interface gráfica com o usuário, onde uma
thread cuida da interface e as outras dos processamentos que a ação na
interface gera. Outra exemplo, que eu utilizo, é quando eu preciso capturar
informações de vários servidores simultâneamente. Neste caso, eu crio uma
thread para cada atividade relacionado ao servidor, e depois recupero os
dados que eu preciso. Neste último exemplo, o meu tempo de processamento é
igual ao maior tempo de processamento da threads, do contrário o meu tempo
seria a soma de tempo na captura de todos os servidores, entendeu ? Eu não,
explicando melhor. Se eu tenho 30 servidores, e demora 1 segundo para pegar
a informação de cada servidor, no meu exemplo com threads deve demorar algo
em torno de uns 3 segundos. Já sem threads vou demoras uns 30 segundos :)
!!!

A utilização de forks e threads dependerá de algumas coisas, o forks é mais
simples de programar no Perl (e mais estável), mas em também consome mais
recursos, já que ele cria uma nova 'instância' do executável, e não permite
o compartilhamento de dados entre o pai e filho. Já a thread complica mais o
código, mas consome menos recursos, pois executado na mesma intância e
'compartilha' - tem algumas restrições neste termo - os dados entre pai e
filho.

Sobre os três, eu diria o seguinte :

   - Se você está pensando em criar uma aplicação cliente/servidor, vá
   correndo para o POE, e pronto;
   - Se você quer criar alguns poucos códigos que deverá ser executado
   apenas alugmas vezes em paralelo e por isto não quer criar muito código
   extra, dê uma olhada se não existe isto em POE, ou se o teu código ficará
   muito estranho, utilize o fork;
   - Se você tem uma rotina no teu programa que é executado várias vezes,
   e que se fosse colocada em executação paralela o código ganharia muito em
   performance, e que para isto você não tem problema em criar código extras.
   Vá para as threads.

Solli M. Honório
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/saopaulo-pm/attachments/20060503/8ca5c1b1/attachment.html 


Mais detalhes sobre a lista de discussão SaoPaulo-pm