Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Perl - насчёт многопоточности. (https://forum.antichat.xyz/showthread.php?t=154814)

GenTao 08.11.2009 04:33

Perl - насчёт многопоточности.
 
:).Наткнулся в каком-то блоге на скрипт:

PHP код:


#!/usr/bin/perl -w

use threads;


my @threads;

@
threads

for my $i (1..3) {

  
push @threadsthreads->create(\&get_now$i);

}


foreach 
my $thread (@threads) {

    
$thread->join();

}


sub get_now

{

    
my $num shift;
    print 
"thread "$num" => "time(), "\n";
    
sleep 1;




Теперь вопросы:

1) Что означает этот символ ?
Код:

->
2) Эм... Как отличить создаваемый объект от используемого метода (когда просматриваешь чужие скрипты).Может,я что не допонял ?

3) В строчке my $num = shift; удаляются элементы массива @_,но что это за элементы такие ? Где они передавались в массив ?

4) Зачем в процедуре get_now{} стоит оператор sleep ? Для задержки между созданием потоков или для чего ?

Spyder 08.11.2009 04:56

1) =\ наверно он вызывает метод из класса
2) Что то я вопроса не понял
3) Ну там скорее не массив передается, а переменная $i
push @threads, threads->create(&get_now, $i);

4) слип наверно для наглядности используется

Spyder 08.11.2009 04:57

cr0w, упс, я не читал твоего поста)

GenTao 08.11.2009 17:26

Хмм)).Я так понял,sleep там вообще не нужен?)))

cr0w 08.11.2009 18:39

Цитата:

Сообщение от GenTao
Хмм)).Я так понял,sleep там вообще не нужен?)))

Вообще, раз нашел это на чьем-то блоге, то у автора и спросил бы зачем ему sleep. Кстати, в скрипте явные ошибки, и работать оно не должно. Вот в таком виде должно работать (не на чем проверить мне щас было, правда, но должно (: ):
Код:

#!/usr/bin/perl

use threads;
use warnings;
use strict;

my @threads;
push @threads, threads->create(\&get_now, $_) for (1..10);
$_->join() foreach @threads;

sub get_now {
    my $num = shift;
    print 'thread ', $num, ' => ', time(), "\n";
}


GenTao 09.11.2009 04:58

Работает,но разве это многопоточность ? В процессах не видно,что количество потоков скрипта равно количеству заданных потоков.

krypt3r 09.11.2009 08:17

o_O Треды выполняются в рамках одного процесса. Нужна куча процессов - юзайте fork()

GenTao 09.11.2009 17:14

Не понял.Я и говорил про один процесс,а не про миллион.Я имел в виду,что еоличество потоков должно увеличиваться в рамках одного процесса (perl.exe - 50,например),или я не прав ?

ЗЫ: До форка не дошёл ещё...

GenTao 11.11.2009 21:12

Не ответят мне )

krypt3r 11.11.2009 23:04

На что? Многопоточен ли пример cr0w? Да, многопоточен. В процессах и не будет отображаться кол-во потоков (форки будут)


Время: 08:14