[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