Xpoint
   [напомнить пароль]

Странные потоки в Perl

Метки: [без меток]
2008-11-24 22:09:02 [обр] gal7[досье]
Хочу разобраться в таком вопросе - когда создаю новый поток разом съедается 100-200 mb памяти и так с каждым новым потоком. Для сравнения - когда эта же программа вызывает функцию потока просто как подпрограмму(уже без всяких потоков) то памяти съедено только 10 Mb. Ничего особенного, большого в программе нет. Это стандартная ситуация в Perl или у меня что-то не то?
спустя 6 часов [обр] Роман Чемисов(7/327)[досье]
gal7[досье]
Скорее всего что-то не так...
Покажите фрагменты кода.
спустя 4 часа 58 минут [обр] gal7[досье]

К примеру, такой код сжирает ~ 300 Mb!

#!C:\usr\bin\perl -w
use threads;
use threads::shared;

my $str;
open (my $desk_fayla, "<", "TEST.TXT") || die;
read($desk_fayla, $str, 100000000);
close($desk_fayla);
my @pr : shared = $str =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\D{1,4}\d{1,5}/i;
syswrite(STDOUT, "@pr\n");

my $potok = threads->create(\&nov_potok);
$potok = threads->create(\&nov_potok);
$potok = threads->create(\&nov_potok);
sleep(5);

sub nov_potok{}

спустя 9 минут [обр] gal7[досье]
Забыл добавить, что в файле находится 4,4 Kb теста, далее из него выделяются прокси в массив @pr(~50шт). Даже если файл и массив пустые, тоже самое наблюдается.
спустя 3 минуты [обр] gal7[досье]
Ага, копался, и только заметил, что 100 миллионов символов стоит... Думал, что считает и выдаст столько сколько есть :)
спустя 24 минуты [обр] Thirteensmay(9/157)[досье]

gal7[досье] А вот посмотрите что в документации threads::shared написано:

By default, variables are private to each thread, and each newly created thread gets a private copy of each existing variable

в частности вас должно заинтересовать each newly created thread gets a private copy of each existing variable, соотнесите это с обьявленной и заполненной у вас в первых же строчках кода переменной $str. Как вы думаете ?

Powered by POEM™ Engine Copyright © 2002-2005