Привет.
Решил все таки посмотреть на 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

Ответить