The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Perl Threads, !*! pheonix, 17-Мрт-09, 19:55  [смотреть все]
Есть такой пример:

#!/usr/bin/perl

  use threads;
my @thread = ();
for (my $i = 0; $i <= 2; $i++) {
   $thread[$i] = threads->new(\&pearl_thread, $i);
   print "Создана $i-я нить. TID=", $thread[$i]->tid, "\n";
}
for (my $i = 2; $i >= 0; $i--) {
   print "$i-я нить вернула ", $thread[$i]->join, "\n";
}
sub pearl_thread ($) {        
   my $number = shift;        
   my $random = int(rand(7)) + 1;
   print "\t$number-я нить ждет $random сек.\n";
   sleep $random;                
   return $random;              
}  

он порождает 3 нити они выполняются параллельно, потом он чекает ответ и всё прекрасно, но как быть если нитей нужно отработать несколько десятков тысяч, если их все запустить сразу то скрипт вывалиться с сегментацией памяти оно и понятно, мало того так не нужно, как сделать так чтобы постоянно выполнялось одновременно по 100, и до тех пор пока не выполняться все 100 000???

то есть первый раз запущено 100 нитей, как только отработала 1 нить из 100, запускается 101 и так далее.

и ещё один момент, не очень удобно, если одна нить повисла, то программа будет ждать пока она не завершиться, как отлавливать что нить завершилась?

не могу сделать решение уже второй день, но очень нужно, помогите кто чем может :)

  • Perl Threads, !*! NuINu, 21:38 , 17-Мрт-09 (1)

    >он порождает 3 нити они выполняются параллельно, потом он чекает ответ и
    >всё прекрасно, но как быть если нитей нужно отработать несколько десятков
    >тысяч, если их все запустить сразу то скрипт вывалиться с сегментацией
    >памяти оно и понятно, мало того так не нужно, как сделать
    >так чтобы постоянно выполнялось одновременно по 100, и до тех пор
    >пока не выполняться все 100 000???

    ты сумашедший, зачем тебе 100 тысяч нитей, да еще привсем при этом чтобы из них выполнялось одновременно только 100, если тебе нужно обрабатывать 100 заданий то и имей 100 нитей.(раз уж так нравиться делать ЭТО через нити)

    >
    >не могу сделать решение уже второй день, но очень нужно, помогите кто
    >чем может :)

    "второй день" :)

    впрочем, хоть я и не классик, можете посмотреть мои примеры
    http://forum.vingrad.ru/forum/topic-247455/kw-%D0%...


    • Perl Threads, !*! pheonix, 22:06 , 17-Мрт-09 (2)
      >[оверквотинг удален]
      >ЭТО через нити)
      >
      >>
      >>не могу сделать решение уже второй день, но очень нужно, помогите кто
      >>чем может :)
      >
      >"второй день" :)
      >
      >впрочем, хоть я и не классик, можете посмотреть мои примеры
      >http://forum.vingrad.ru/forum/topic-247455/kw-%D0%...

      мне надо обработать было ВСЕ(100 000) по очереди но рабочих по 100, ну так надо, в общем я решил уже проблему, зашёл сюда зачесть кто что посоветовал))) но как всегда на оппеннет ничего не посоветовали путнего, ну а ты чувак вместо использования LWP там в своём посте  учил бы Socket

      • Perl Threads, !*! parad, 02:28 , 18-Мрт-09 (3)
        нуну, ты бы лучше прежде чем бычить почитал теорию конечных автоматов, про мультиплексирования что-нибуть узнал, на худой конец найди статьи про трединг в перле и его реализацию и почему им никто из перловиков не пользуется...

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

        а чувак тебе правильно сказал - не тупи.

      • Perl Threads, !*! NuINu, 10:04 , 18-Мрт-09 (4)
        >[оверквотинг удален]
        >>"второй день" :)
        >>
        >>впрочем, хоть я и не классик, можете посмотреть мои примеры
        >>http://forum.vingrad.ru/forum/topic-247455/kw-%D0%...
        >
        >мне надо обработать было ВСЕ(100 000) по очереди но рабочих по 100,
        >ну так надо, в общем я решил уже проблему, зашёл сюда
        >зачесть кто что посоветовал))) но как всегда на оппеннет ничего не
        >посоветовали путнего, ну а ты чувак вместо использования LWP там в
        >своём посте  учил бы Socket

        а я нигде LWP там и не использовал, ты меня с кем то путаешь. там был пример как правильно  тредами работать.
        ну сделал так сделал.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру