[Rio-pm] Ajuda com Threads - tempo de abertura

Bruno Buss bruno.buss em gmail.com
Sábado Julho 10 04:45:12 PDT 2010


Olá Blabos,

2010/7/10 Blabos de Blebe <blabos em gmail.com>

> Desculpe a minha ignorância e o meu estado sonolerdo, mas por que vc
> faz join dentro do loop que cria a thread?
>
> Eu posso ter entendido errado, mas se for isso vc não está
> serializando as threads?
>

Também não tenho certeza (afinal o código não é meu :P), mas acho que o que
ele faz naquele loop interno é se o número de threads existentes for maior
que o limite dele (250 no caso), ele entre no loop e faz join em uma das
threads, para esperar que ela possa acabar e disparar uma nova thread.

Além disso, como ele faz o segundo loop interno baseado no retorno da
listagem de "threads::joinable", que são threads que já acabaram seu
processamento e estão apenas esperando para serem finalizadas e puxar o
resultado delas de volta, então as operações de join() ai são não
bloqueantes.


Apenas frisando, minha experiência real em aplicações paralelas é baixa,
então se eu disser alguma besteira grande por favor me avisem/corrijam.


João, será que utilizando algo como Thread::Pool[1] ou
Thread::Pool::Simple[2] seu código não ficaria mais organizado?

Segundo o perldoc perlthrtut[3]:
"Performance considerations
       The main thing to bear in mind when comparing Perl's ithreads to
other threading models is the fact that for each new thread created, a
complete copy of all the variables
       and data of the parent thread has to be taken. Thus, thread creation
can be quite expensive, both in terms of memory usage and time spent in
creation. The ideal way to
       reduce these costs is to have a relatively short number of long-lived
threads, all created fairly early on -- before the base thread has
accumulated too much data. Of
       course, this may not always be possible, so compromises have to be
made. However, after a thread has been created, its performance and extra
memory usage should be little
       different than ordinary code."

Principalmente a parte do: "Thus, thread creation can be quite expensive,
both in terms of memory usage and time spent in creation.".
Será que aqui uma implementação utilizando uma pool de threads (como
sugerido acima), não seria melhor? :)

(ps: eu não sei o quanto atualizado está essa documentação, mas ela está
presente no perldoc do perl 5.12.1)


[1] http://search.cpan.org/~elizabeth/Thread-Pool-0.32/lib/Thread/Pool.pm
[2] http://search.cpan.org/~jwu/Thread-Pool-Simple-0.24/Simple.pm
[3] http://perldoc.perl.org/perlthrtut.html


[ ]'s
-- 
Bruno C. Buss
http://brunobuss.wordpress.com/
http://www.dcc.ufrj.br/~brunobuss/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20100710/419b23c0/attachment.html>


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