Да-да. Я снова начал програмировать на Perl. Хочу написать небольшой поисковичек по локальным ftp-ресурсам моей домашней сети. А прежде всего столкнулся с проблемой сканирования сети на предмет доступных ftp-серверов с разрешеным доступом для анонимуса. Набросав небольшой скриптец, запустив его - понял, что для сканирования сети 10/10 потребуется 5*255*255*63 = 20482875 секунд или больше 250 дней (-; и тогда я подумал: “к черту! а зачем придумали многопоточность?” к тому же моя домашняя FreeBSD 7.0 с двуядерным Xeon E3110 достаточно хорошо должна стправиться с такими приложениями. И я начал копать в эту сторону.
Для начала надо было пересобрать Perl с поддержкой многопоточности. Сделано.
Можно создавать потоки как с контролем за жизнью, так и без контроля (типа запустил и забыл).
В первом случае используем:
threads->create(\&mySub,$param)->join;
А во втором:
threads->create(\&mySub,$param)->detach;
Ежели нам надо запустить кучу тредов и не дать основному скрипту закончить работу до окончания работы потоков, можно использовать такую конструкцию:
foreach (1..$numThreads) {
threads->create(\&mySub,$param);
};foreach (threads->list) { $_->join; };
list - возвращает список потоков, для которых еще не применили join или detach.
Ну вот и основное, что я пользую нынче в многопоточных приложениях на Perl. Надеюсь, не последний пост на эту тему (-;
____
И еще:
Интересный SEO-блог Дмитриева Романа.
Дракасмит сделал RE: дизайн, а у Креативного кота глючит CuteFTP




5 Комментариев
Оставайтесь на связи при разговоре, подпишитесь на рассылку RSS канала для комментариев на эту запись.
Продолжение дискуссии