Привет.
Решил все таки посмотреть на 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? Подскажите направление?
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org