<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div id="yiv1811700490"><div><div style="color:#000;background-color:#fff;font-family:times new roman, new york, times, serif;font-size:12pt;"><div id="yiv1811700490yui_3_7_2_19_1351579858106_39">Привет.<br>Решил все таки посмотреть на AnyEvent::HTTP.<br>Сделал скачивание страниц сайта perl.com по заранее приготовленному списку url (1123 ссылки).<br><br><br>Однопоточный LWP справляется с этим за 7:53 минут<br>HTTP::Async (33 одновременных соединения) - 1:55<br>AnyEvent::HTTP (33 одновременных соединения) - 0:38<br>Coro::LWP (33 одновременных соединения) - 0:21<br><br>Наверно AnyEvent::HTTP медленней, чем Coro::LWP
 из-за того, что не кешируется DNS.<br>А последние версии AnyEvent и AnyEvent::CacheDNS не совместимы
 друг с другом.<br><br>А вот вариант с prefork в 10 дочерних процессов справился за 0:48.<br>Каждому дочернему процессу передается по одному url, он возвращает результат и ему передается следующий url)<br><br>На компьютере 4 ядра.<br><br>А в 33 потока prefork справился быстрей всех - 0:17<br><br><br>Чтобы тесты не были слишком искусственными, я добавил анализ страниц при помощи HTML::Parser (поиск внешний и внутренних ссылок).<br><br>LWP -                 9:22<br>AnyEvent::HTTP (33) - 1:12<br>Coro::LWP (33) -      1:17<br>prefork (10) -       
 0:54<br>prefork (33) -        0:23<br><br>затем все таки уговорил себя и сделал гибридный вариант: <br>prefork (4 процесса) и в каждом 8 Coro - 0:24<br>prefork (4 процесса) и в каждом 33 Coro - 0:24<br>prefork (4 процесса) и в каждом 33 AnyEvent::HTTP - 0:22<br><br>Кстати, когда снял нагрузку (анализ страниц), то заметил, что вариант prefork-Сoro иногда зависает, а вариант prefork-AnyEvent::HTTP - нет.<br><br><br>Что я могу сказать по всему этому. Было интересно. Но наверное, использование Event оправдано лишь для узкого круга задач, где куча медленных соединений и задачи эти не нагружают CPU. Но для
 этого вероятно проще использовать тот-же Erlang и Haskell, которые сами все ядра использую.<br><br>Хотя ведь при общении с дочерними процессами используется select или прочий event.<br><br>А для каких задач вы используете AnyEvent?<br><br>P.S.<br><br>Кстати, об Erlang.<br><br>Не смотря на фразу "Слава Богу, я не подписан на из списки рассылки", я решил посмотреть на Erlang.<br>Больше меня удивило, что периодически пользователи Erlang доказывают, что Erlang круче, чем node.js.<br><br>Но, ведь, если я правильно понял, Erlang на уровень выше, чем node.js и AnyEvent.<br>Так почему они что-то пытаются
 доказать? Ведь слон на Моську не обращает внимания.<br>Или в Erlang есть какой-то
 подводный камень, который скрывают?<br><br>P.P.S<br>А что еще есть интересного в Perl? Подскажите направление?</div></div></div></div></div></body></html>