<div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Solli, aproveitando o ensejo... em que situações é<br>recomendável usar threads em Perl? Por exemplo,
<br>existem soluções alternativas como usar fork e os<br>diversos módulos do POE: qual a diferença principal<br>entre essas opções?<br><br></blockquote></div><span style="font-family: courier new,monospace;">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.
<br><br>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 :) !!!
<br><br>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.
<br><br>Sobre os três, eu diria o seguinte : <br></span><ul><li><span style="font-family: courier new,monospace;">Se você está pensando em criar uma aplicação cliente/servidor, vá correndo para o POE, e pronto;</span></li>
<li><span style="font-family: courier new,monospace;">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;
</span></li><li><span style="font-family: courier new,monospace;">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.
</span></li></ul><span style="font-family: courier new,monospace;">Solli M. Honório</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><br></span>