[Cascavel-pm] threads e uso de CPU

Alceu Rodrigues de Freitas Junior glasswalk3r em yahoo.com.br
Quarta Dezembro 9 21:40:06 PST 2009


Olá Nilson,

Comentários abaixo.

Nilson Santos Figueiredo Jr. escreveu:

> Existem situações em que não será possível fazer com que seu programa
> use toda CPU, porque o gargalo é outra coisa. Por exemplo, chamadas a
> bancos de dados costumam ser blocantes.

Hmm... por isso eu faço a única pesquisa que preciso no banco e guardo 
tudo em memória. E isso é feito antes de eu criar qualquer thread.

> Além disso, a sincronização entre threads (feita pelas variáveis
> shared) é algo blocante, ou seja, um thread pode ter de ficar
> esperando "à toa". Isso não vai "gastar" CPU, mas o thread vai ficar
> travado.

Mas isso não acontece somente quando eu lanço mão da função lock? Como 
eu não alterei nenhuma variável a thread não deveria esperar por nada. 
Ou estou errado?

> Se eu entendi seu programa corretamente, você não entendeu
> perfeitamente a função de variáveis "shared". Nenhuma de suas
> variáveis "shared" são escritas em nenhum thread, portanto não há
> necessidade de serem "shared" - ao criar um thread, todo o contexto
> será copiado, apenas se você quiser que modificações feitas dentro de
> um thread sejam visíveis nos outros você deve usar "shared".

Ops... eu tenho coisas demais em memória para fazer cópias para todas as 
threads instanciadas.

Eu usei essa documentação aqui como referência:

"The biggest difference between Perl ithreads and the old 5.005 style 
threading, or for that matter, to most other threading systems out 
there, is that by default, no data is shared. When a new perl thread is 
created, all the data associated with the current thread is copied to 
the new thread, and is subsequently private to that new thread!" -- 
http://www.mathematik.uni-ulm.de/help/perl5/doc/perlthrtut.html

Se faço elas shared, não tem cópia!
Realmente não edito nenhuma delas... mas o ideal seria apagar chaves do 
hash.

> Tente remover os "shared" e remover o próprio uso do threads::shared e
> veja se sua situação melhora.

Vou testar antes de começar a apagar chaves do hash e ver se melhora.

Abraços,
Alceu






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