<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Привет, это опять я. Все, решил.<br>Буду учить Perl как супер-пупер динамический и Haskell как супер-пупер статический.<br><br>Уже прочитал всего Ларри и начал читать Линкольна про сетевое программирование.<br><br>Вот уже написал программу на Perl, которая показывает кто больше пишет в moscow-pm (программа в конце письма):<br>196   Alexandr Alexeev<br>174   Ivan Petrov<br>164   Alexandr Gomoliako<br>124   Михаил Монашёв<br>110   Akzhan Abdulin<br><br>Теперь буду, думать как сделать, чтобы
 страницы запрашивались и обрабатывались одновременно.<br>Линкольн говорит, что thread использовать не стоит.<br>Наверно, ситуация с тех пор не изменилось, так как у меня perl ругается: "This Perl not built to support threads".<br>Можно попробовать, как кто-то мне говорил, асинхронные библиотеки. А какие? Их так много на CPAN.<br><br>Но, ведь кроме получения данных надо их обрабатывать.<br>Хочется, чтобы все ядра процессора работали, а не одно.<br>Поэтому надо использовать fork.<br><br>Как-то не понятно, а когда нужны асинхронные библиотеки? Если интернет
 быстрый.</span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;"><span>Читал, что fork не занимает много памяти из-за COW (или как оно там).<br>Но какая разница 10 процессов по 1 HTML странички в каждом или в одном 10 HTML страничек?<br>А так при анализе страничек все ядра процессора будут использоваться!<br>Да и базы данных все синхронные, кажется.<br><br>Или асинхронные библиотеки были нужны в прошлом, когда интернет был медленный и процессоры с одним ядром?<br><br>А сейчас изучение затормозилось. Не могу найти
 хороший модуль, для общения с дочерними процессами.<br>Есть модуля для распараллеливания задач по fork, но они все примитивные.<br>Хочется, чтобы дочерний процесс мог у родителя запросить дополнительные данные, если в этом возникнет необходимость,<br>вернуть промежуточные результаты и прочие.<br>В каком модуле на СПАНЕ это есть? А есть, чтобы можно было не только задействовать все ядра CPU, а и несколько компьютеров?<br><br>Решил это глянуть на haskell. Там все это вроде есть.<br>Но в нем я запутался в другом. Говорят, что ленивый ввод вывод -
 это круто.<br>А потом говорят, что в нем много проблем и надо использовать не его, а какие-то трубы (conduit) или энумераторы.<br><br>Что-то совсем нет настроения...<br><br>__END__<br><br>use LWP;<br><br>my $ua = LWP::UserAgent->new();<br><br>my $base_url = "http://mail.pm.org/pipermail/moscow-pm/";<br><br>my %a = ();<br><br>my $r = $ua->get($base_url);<br>my $c = $r->content();<br>my @m = $c =~ m/"2012-\w+\/author\.html"/g;<br>foreach my $m (@m) {<br>    $m =~ s/"//g;<br><br>    my $new_url = $base_url . $m;<br>    my $r = $ua->get($new_url);<br>    my $c = $r->content;<br>    my @a = $c =~ m/<I>.+?<\/I>/g;<br><br>    foreach my $a (@a) {<br>        $a =~
 s/<I>//g;<br>        $a =~ s/<\/I>//g;<br>        $a{$a} = $a{$a} + 1;<br>    }<br>}<br><br>my @a = keys(%a);<br>my @as = sort(@a);<br>foreach my $as (@as) {<br>    my $n = $a{$as};<br>    print $n . "   " . $as . "\n";<br>}<br></span></div></div></body></html>