[Moscow.pm] Распараллелить

ksvs ksvs1996 на ymail.com
Вт Окт 16 02:31:11 PDT 2012


Привет, это опять я. Все, решил.
Буду учить Perl как супер-пупер динамический и Haskell как супер-пупер статический.

Уже прочитал всего Ларри и начал читать Линкольна про сетевое программирование.

Вот уже написал программу на Perl, которая показывает кто больше пишет в moscow-pm (программа в конце письма):
196   Alexandr Alexeev
174   Ivan Petrov
164   Alexandr Gomoliako
124   Михаил Монашёв
110   Akzhan Abdulin

Теперь буду, думать как сделать, чтобы страницы запрашивались и обрабатывались одновременно.
Линкольн говорит, что thread использовать не стоит.
Наверно, ситуация с тех пор не изменилось, так как у меня perl ругается: "This Perl not built to support threads".
Можно попробовать, как кто-то мне говорил, асинхронные библиотеки. А какие? Их так много на CPAN.

Но, ведь кроме получения данных надо их обрабатывать.
Хочется, чтобы все ядра процессора работали, а не одно.
Поэтому надо использовать fork.

Как-то не понятно, а когда нужны асинхронные библиотеки? Если интернет быстрый.
Читал, что fork не занимает много памяти из-за COW (или как оно там).
Но какая разница 10 процессов по 1 HTML странички в каждом или в одном 10 HTML страничек?
А так при анализе страничек все ядра процессора будут использоваться!
Да и базы данных все синхронные, кажется.

Или асинхронные библиотеки были нужны в прошлом, когда интернет был медленный и процессоры с одним ядром?

А сейчас изучение затормозилось. Не могу найти хороший модуль, для общения с дочерними процессами.
Есть модуля для распараллеливания задач по fork, но они все примитивные.
Хочется, чтобы дочерний процесс мог у родителя запросить дополнительные данные, если в этом возникнет необходимость,
вернуть промежуточные результаты и прочие.
В каком модуле на СПАНЕ это есть? А есть, чтобы можно было не только задействовать все ядра CPU, а и несколько компьютеров?

Решил это глянуть на haskell. Там все это вроде есть.
Но в нем я запутался в другом. Говорят, что ленивый ввод вывод - это круто.
А потом говорят, что в нем много проблем и надо использовать не его, а какие-то трубы (conduit) или энумераторы.

Что-то совсем нет настроения...

__END__

use LWP;

my $ua = LWP::UserAgent->new();

my $base_url = "http://mail.pm.org/pipermail/moscow-pm/";

my %a = ();

my $r = $ua->get($base_url);
my $c = $r->content();
my @m = $c =~ m/"2012-\w+\/author\.html"/g;
foreach my $m (@m) {
    $m =~ s/"//g;

    my $new_url = $base_url . $m;
    my $r = $ua->get($new_url);
    my $c = $r->content;
    my @a = $c =~ m/<I>.+?<\/I>/g;

    foreach my $a (@a) {
        $a =~ s/<I>//g;
        $a =~ s/<\/I>//g;
        $a{$a} = $a{$a} + 1;
    }
}

my @a = keys(%a);
my @as = sort(@a);
foreach my $as (@as) {
    my $n = $a{$as};
    print $n . "   " . $as . "\n";
}
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121016/3da7ba4a/attachment.html>


Подробная информация о списке рассылки Moscow-pm