[Cascavel-pm] threads e uso de CPU

Nilson Santos Figueiredo Jr. acid06 em gmail.com
Quarta Dezembro 9 16:51:21 PST 2009


On Wed, Dec 9, 2009 at 9:29 PM, Alceu R. de Freitas Jr.
<glasswalk3r em yahoo.com.br> wrote:
> O código executa normalmente, exceto pelo fato que mais lento do que eu gostaria. Otimizações à parte (como remover registros do hash depois de processados, algo que ainda não fiz) eu percebi que o computador aonde estou rodando isso (Intel Core2 DUO) não usa toda a capacidade de CPU (memória não é gargalo aqui). Ela fica entre 60 e 70% de uso. Eu gostaria que ficasse em algo como 90%, mas mesmo aumentando o número de threads simultâneas esse percentual não muda (e suspeito que o programa não vai rodar mais rápido por isso). Esse é um comportamento normal de se trabalhar com threads? É a primeira vez que uso isso com Perl.
>
> Apesar de ler sobre recomendações de não usar threads com Perl, estou em um ambiente Microsoft e gostaria de alternativas simples de compartilhar dados em memória com execuções paralelas. Fico aberto à sugestões.

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.

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.

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".

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

-Nilson Santos F. Jr.


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