[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