1. Покажите мне пожалуйста ваш код на AnyEvent.
2. Перед <use AnyEvent> ведь правда написано <use EV>? и в конце программы написано EV::loop(), а не AE::cv->recv? 3. Если сравнивать время 1 запроса AnyEvent'ом и 1 запроса LWP (или Curl), то это время будет зависеть во многом от внешнего ресурса. вы сделали параллель по 33 коннекта. т.е. в принципе вы выполняете последовательность из ~34 запросов. (1123/33) и неважно чем, LWP или AnyEvent'ом, вы замерили максимальное время последовательных 34 запросов. Сила AnyEvent'а в том, что в одном процессе вы пожете "параллельно" выполнять пару сотен таких задач. если-бы у вас урлы были не на одном домене (perl.com), а на разных, то можно было-бы отправить их всех одновременно. PS: в AnyEvent::HTTP есть ограничение на одновременное подключение к одному домену. попробуй еще добавить $AnyEvent::HTTP:: MAX_PER_HOST = 33; On 10/30/2012 03:43 PM, ksvs wrote: > Привет. > Решил все таки посмотреть на 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
