[Moscow.pm] Event and fork

ksvs ksvs1996 на ymail.com
Вт Окт 30 04:43:54 PDT 2012


Привет.
Решил все таки посмотреть на AnyEvent::HTTP.
Сделал скачивание страниц сайта perl.com по заранее приготовленному списку url (1123 ссылки).


Однопоточный LWP справляется с этим за 7:53 минут
HTTP::Async (33 одновременных соединения) - 1:55
AnyEvent::HTTP (33 одновременных соединения) - 0:38
Coro::LWP (33 одновременных соединения) - 0:21

Наверно AnyEvent::HTTP медленней, чем Coro::LWP из-за того, что не кешируется DNS.
А последние версии AnyEvent и AnyEvent::CacheDNS не совместимы
 друг с другом.

А вот вариант с prefork в 10 дочерних процессов справился за 0:48.
Каждому дочернему процессу передается по одному url, он возвращает результат и ему передается следующий url)

На компьютере 4 ядра.

А в 33 потока prefork справился быстрей всех - 0:17


Чтобы тесты не были слишком искусственными, я добавил анализ страниц при помощи HTML::Parser (поиск внешний и внутренних ссылок).

LWP -                 9:22
AnyEvent::HTTP (33) - 1:12
Coro::LWP (33) -      1:17
prefork (10) -       
 0:54
prefork (33) -        0:23

затем все таки уговорил себя и сделал гибридный вариант: 
prefork (4 процесса) и в каждом 8 Coro - 0:24
prefork (4 процесса) и в каждом 33 Coro - 0:24
prefork (4 процесса) и в каждом 33 AnyEvent::HTTP - 0:22

Кстати, когда снял нагрузку (анализ страниц), то заметил, что вариант prefork-Сoro иногда зависает, а вариант prefork-AnyEvent::HTTP - нет.


Что я могу сказать по всему этому. Было интересно. Но наверное, использование Event оправдано лишь для узкого круга задач, где куча медленных соединений и задачи эти не нагружают CPU. Но для
 этого вероятно проще использовать тот-же Erlang и Haskell, которые сами все ядра использую.

Хотя ведь при общении с дочерними процессами используется select или прочий event.

А для каких задач вы используете AnyEvent?

P.S.

Кстати, об Erlang.

Не смотря на фразу "Слава Богу, я не подписан на из списки рассылки", я решил посмотреть на Erlang.
Больше меня удивило, что периодически пользователи Erlang доказывают, что Erlang круче, чем node.js.

Но, ведь, если я правильно понял, Erlang на уровень выше, чем node.js и AnyEvent.
Так почему они что-то пытаются доказать? Ведь слон на Моську не обращает внимания.
Или в Erlang есть какой-то
 подводный камень, который скрывают?

P.P.S
А что еще есть интересного в Perl? Подскажите направление?
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121030/38da4a9c/attachment-0001.html>


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