[Cascavel-pm] webcrawler e perl x activeperl [era: (sem assunto)]

Nilson Santos Figueiredo Junior acid06 em gmail.com
Segunda Agosto 1 06:43:29 PDT 2005


On 8/1/05, Alceu R. de Freitas Jr. <glasswalk3r em yahoo.com.br> wrote:
> Então estamos com algum problema... eu tentei usar
> IPC::Open3 em Windows 2000 com Active Perl 5.6 para
> ler a saída e mensagens de erro do SQL Loader da
> Oracle e não consegui fazer funcionar... não tive
> problemas de fazer isso em um Linux com Perl 5.8.
> Problema de SO ou versão do Perl?

Teste com 5.8.x e uma versão nova dos módulos, provavelmente funciona
(a não ser que seja o caso específico em que *não* funciona, que é
citado na manpage do IPC::Open3).

> Bem, em ambiente Windows isso parece ser mais seguro
> mesmo (a própria página de documentação do Named Pipe
> recomenda), só acho que não tem muito sentido usar
> sockets se você está rodando processos na mesma
> máquina. :-)

Sockets são mais fáceis de trabalhar (ao menos pra mim). Muitas coisas
usam sockets pra comunicam na mesma máquina. Ora, o X Server usa
sockets. ;-)

> Humm... estou precisando me atualizar. As referências
> que encontrei diziam que fork() em Windows não
> funcionava...

Pelo que eu percebi, você não deve ter chegado a usar as versões
estáveis mais novas sob Windows. Muita coisa mudou desde a 5.6.

> Ahn, está explicado... emulação. Mas isso deve causar
> perda de performance, não? Emular as coisas sempre sai
> mais caro.

Na verdade usar fork() em Windows é tão caro quanto criar threads em
qualquer plataforma. O threading model atual do perl, o ithreads,
surgiu a partir da emulação de fork() para Windows. Com a diferença de
que o OS é um pouco melhor em cuidar de threads do que de processos.

Inclusive, sob Linux (ou Unixes em geral), é *melhor* você usar fork()
do que threads. Porque os threads são como um fork() emulado que ao
invés de ir pra um novo processo vai pra um novo threads. E o fork()
nativo do sistema tem recursos que melhoram performance e consumo de
memória como CoW (copy on write), que não existem em Windows. Isso
gerou módulos como o "forks" e o "forks::shared" que implementam a
mesma função dos módulos "threads" e "threads::shared" só que usando
fork() ao invés de criar um thread. Claro que, sob Windows, não tem
sentido usar esses módulos.

-Nilson Santos F. Jr.


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