[SP-pm] WWW::Curl::Multi

Nilson Santos Figueiredo Jr. acid06 at gmail.com
Mon Sep 7 09:48:05 PDT 2009


2009/9/7 Otávio Fernandes <otaviof at gmail.com>:
> Faltou citar o principal fator: copy-on-write
> (http://en.wikipedia.org/wiki/Copy-on-write). Sem dúvida nenhuma, do
> ponto de vista computacional, manter processos é *muito* mais simples
> do que manter threads, só pelo fator "memória compartilhada".
> Lembrando que nós temos o COW sobre SOs unix-like, eu devo concordar
> com o Luis, que é possível ter o mesmo desempenho das threads usando
> processos de forma correta e com *gerenciamento* muito mais simples.

Threads são mais fáceis para o scheduler gerenciar: full vs. partial
context switch.
Threads são mais fáceis para *você* gerenciar: API limpa vs. bagunça
usando signals (em que você só pode sinalizar "alguma coisa"
aconteceu, ou então implementar IPC via sockets/pipes/shared mem na
mão).

> O seu exemplo é realmente muito simples e eficiente, mas veja por
> "baixo dos panos" a quantidade de código que o interpretador Perl teve
> que executar para manter o mundo das threads saudável, sem
> dead-locks... hoje threads em Perl é um sistema estável e
> relativamente confiável, porem, devemos convir que a alternativa
> unix-like para resolver este problema é o COW, ou seja, o SO
> resolvendo este problema por nós. Se nós usarmos uma implementação
> para gerenciamento de processos (forks), também podemos chegar a uma
> quantidade parecida de linhas.

A quantidade de código pra evitar dead-locks ao realizar IPC é a mesma
em qualquer situação - o problema de deadlocks independente da
implementação, é algo inerente ao paralelismo.
Apesar da *criação* de processos talvez ser mais rápida em Linux por
causa do CoW, a execução de threads é mais rápida, por causa da troca
de contextos mais rápida e, também, pelo fato de que toda vez em que
você altera uma área de memória CoW, ela tem de ser copiada (então se
você "tocar" em toda a memória, vai ser menos eficiente com CoW, pois
copiar tudo de uma vez é mais eficiente que pedaço por pedaço).

Como eu disse na mensagem anterior, se usar o forks, você vai ter um
número igual de linhas. Mas o código interno é MUITO mais complexo que
o usado para gerenciar threads - basta dar uma olhada no código do
forks.

-Nilson Santos F. Jr.


More information about the SaoPaulo-pm mailing list