Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Perl - насчёт многопоточности. |

08.11.2009, 04:33
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Perl - насчёт многопоточности.
 .Наткнулся в каком-то блоге на скрипт:
PHP код:
#!/usr/bin/perl -w
use threads;
my @threads;
@threads
for my $i (1..3) {
push @threads, threads->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 ? Для задержки между созданием потоков или для чего ?
|
|
|

08.11.2009, 04:56
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
1) =\ наверно он вызывает метод из класса
2) Что то я вопроса не понял
3) Ну там скорее не массив передается, а переменная $i
push @threads, threads->create(&get_now, $i);
4) слип наверно для наглядности используется
|
|
|

08.11.2009, 04:57
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
cr0w, упс, я не читал твоего поста)
|
|
|

08.11.2009, 17:26
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Хмм)).Я так понял,sleep там вообще не нужен?)))
|
|
|

08.11.2009, 18:39
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме: 2753780
Репутация:
585
|
|
Сообщение от 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";
}
|
|
|

09.11.2009, 04:58
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Работает,но разве это многопоточность ? В процессах не видно,что количество потоков скрипта равно количеству заданных потоков.
|
|
|

09.11.2009, 08:17
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
o_O Треды выполняются в рамках одного процесса. Нужна куча процессов - юзайте fork()
|
|
|

09.11.2009, 17:14
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Не понял.Я и говорил про один процесс,а не про миллион.Я имел в виду,что еоличество потоков должно увеличиваться в рамках одного процесса (perl.exe - 50,например),или я не прав ?
ЗЫ: До форка не дошёл ещё...
|
|
|

11.11.2009, 21:12
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Не ответят мне )
|
|
|

11.11.2009, 23:04
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
На что? Многопоточен ли пример cr0w? Да, многопоточен. В процессах и не будет отображаться кол-во потоков (форки будут)
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|