[Cascavel-pm] Medir Consumo de Memoria com Threads

Nilson Santos Figueiredo Junior acid06 em gmail.com
Terça Março 28 08:06:18 PST 2006


On 3/28/06, Joenio Marques <joenio em gmail.com> wrote:
> Estou me aventurando na programação com threads e meu primeiro
> problema após ter conseguido implementar minha solução é com o consumo
> de memória.
>
> Notei que a cada thread o consumo de memoria aumenta consideralvemente...
> O que estou querendo é saber como eu posso medir quanto cada
> estrutura(sub, hash, array, ref, etc...) do meu programa está
> consumindo.

Sim. Os ithreads de Perl consomem muita memória pois, na verdade, eles
não são muito diferentes de um fork(). Todo o interpretador é clonado
e o tamanho do interpretador só aumenta com o tempo.

> Portanto minha preocupação agora é saber se estou fazendo algo errado
> e onde está o erro. Imagino que descobrir em que ponto meu programa
> está consumindo mais memoria possa me dar uma luz.

Para contornar essa limitação existem algumas técnicas. A mais simples
é criar um pool de threads assim que o programa inicia, antes que ele
tenha tido tempo de "acumular" muitas estruturas de dados. A outra
consiste em criar um thread "limpo" que irá servir como "thread pai"
para todos os outros clones e aí ao invés de criar threads
manualmente, você pede que esse thread pai crie.

De qualquer forma, todo o interpretador será clonado. Porém, com um
estado limpo do intepretador a memória gasta é aceitável.

-Nilson Santos F. Jr.


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