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

Discussion in 'PHP' started by genom--, 15 Jan 2007.

  1. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    use threads;


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

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

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



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

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    правильно спроектировать.

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

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    хм а это идея -- хотя продолжение его работы возможно только с исзменение внешней переменной -- мой скрипт берет из массива пароли на проверку --- и нужно знать какие брать пароли каждому потоку -- следовательно смещать указатель в массиве
     
  4. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    все ненадо уже

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

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

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

    VeX New Member

    Joined:
    5 Jan 2007
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    а не проще сделать многопоточность на форках?
    преимущества:
    1) функция fork() есть всегда
    2) нет гемора как с модулям тредов
    3) много готовых примеров
     
  6. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Нет, не проще:
    1) модули тоже
    2) гемора намного меньше с тредами
    3) аналогично

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

    VeX New Member

    Joined:
    5 Jan 2007
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    не согласен: на многих хостингах специально убирают данный модуль

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

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

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

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

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Так хостинги не для этого созданы.
    Кстати и perl обычно скомпилен бывает без поддержки fork()

    Что такое fork()? Это ветвление. Переменные будут разными.
     
  9. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    /threadnav28020-2-10.html
    последний пост + посмотри на дату