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

Форум АНТИЧАТ (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=31383)

genom-- 15.01.2007 23:07

perl + потоки = геморой
 
use threads;


for(1..$thread){threads->create(\&brut);}

lol:
if($thread<10)
{threads->create(\&brut);sleep(2);goto(lol);}

sub brut {
$thread=$thread-1;
}



вот код сначала создаем потоки а потом периодически нужно проверять их колчество и если некоторые уже отработали то создавать новые -- но из подпроцесса нельзя изменить переменную находящуюся в осн цикле программы -- что делать??

nerezus 15.01.2007 23:39

правильно спроектировать.

подскажу: потоки не должнны заканчиваться. Если поток сделал часть работы, то просто пусть берет следующую часть.
Хотя это обходной путь, но он легче ;)

genom-- 15.01.2007 23:42

хм а это идея -- хотя продолжение его работы возможно только с исзменение внешней переменной -- мой скрипт берет из массива пароли на проверку --- и нужно знать какие брать пароли каждому потоку -- следовательно смещать указатель в массиве

genom-- 16.01.2007 00:09

все ненадо уже

получилось так

use threads;
use threads::shared;
my $num : shared;

тогда переменную $num мона изменять откуда угодно

VeX 18.01.2007 15:03

а не проще сделать многопоточность на форках?
преимущества:
1) функция fork() есть всегда
2) нет гемора как с модулям тредов
3) много готовых примеров

nerezus 18.01.2007 15:08

Нет, не проще:
1) модули тоже
2) гемора намного меньше с тредами
3) аналогично

4) делать потоки через потоки - правильно
5) в тредах есть общие переменные

VeX 18.01.2007 15:56

Цитата:

Сообщение от nerezus
Нет, не проще:
1) модули тоже

не согласен: на многих хостингах специально убирают данный модуль

Цитата:

Сообщение от nerezus
2) гемора намного меньше с тредами

на вкус и цвет, мне проще с форками.

Цитата:

Сообщение от nerezus
3) аналогично

мне редко попадались, хз

Цитата:

Сообщение от nerezus
4) делать потоки через потоки - правильно

правильно - это когда тебе удобно.

Цитата:

Сообщение от nerezus
5) в тредах есть общие переменные

Эмм... а разве в форках нельзя юзать общие переменные?

nerezus 18.01.2007 16:47

Цитата:

не согласен: на многих хостингах специально убирают данный модуль
Так хостинги не для этого созданы.
Кстати и perl обычно скомпилен бывает без поддержки fork()

Цитата:

Эмм... а разве в форках нельзя юзать общие переменные?
Что такое fork()? Это ветвление. Переменные будут разными.

KSURi 18.01.2007 17:52

Цитата:

Сообщение от genom--
все ненадо уже

получилось так

use threads;
use threads::shared;
my $num : shared;

тогда переменную $num мона изменять откуда угодно

http://forum.antichat.ru/threadnav28020-2-10.html
последний пост + посмотри на дату


Время: 16:04