<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Спасибо. <br></span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;"><span>Указание MAX_PER_HOST;</span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;"><span>Увеличило скорость без нагрузки с 0:38 до 0:10</span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;"><span>А под нагрузкой прирост был с 1:12.82 до 1:03.51.<br></span></div><div><span><br></span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family:
 times new roman,new york,times,serif; background-color: transparent; font-style: normal;"><span>Замена  AnyEvent->condvav->recv на EV::loop() влияние не оказала.<br></span></div><div><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;">> Сила AnyEvent'а в том, что в одном процессе вы пожете
      "параллельно" выполнять пару сотен таких задач.</div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;">А какие на практике обычно бывают такие задачи, который не грузят сильно CPU?<br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;"><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: times new roman,new york,times,serif; background-color: transparent; font-style: normal;"><br></div>  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <font size="2" face="Arial"> <hr size="1">  <b><span
 style="font-weight:bold;">From:</span></b> Mons Anderson <inthrax@gmail.com><br> <b><span style="font-weight: bold;">To:</span></b> moscow-pm@pm.org <br> <b><span style="font-weight: bold;">Sent:</span></b> Wednesday, 31 October 2012, 13:58<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [Moscow.pm] Event and fork<br> </font> </div> <br><meta http-equiv="x-dns-prefetch-control" content="off"><div id="yiv2118419149">
  
    
  
  <div>
    <div class="yiv2118419149moz-cite-prefix">1. Покажите мне пожалуйста ваш код на
      AnyEvent.<br>
      <br>
      2. Перед <use AnyEvent> ведь правда написано <use EV>?
      и в конце программы написано EV::loop(), а не AE::cv->recv?<br>
      <br>
      3. Если сравнивать время 1 запроса AnyEvent'ом и 1 запроса LWP
      (или Curl), то это время будет зависеть во многом от внешнего
      ресурса.<br>
      вы сделали параллель по 33 коннекта. т.е. в принципе вы выполняете
      последовательность из ~34 запросов. (1123/33)<br>
      и неважно чем, LWP или AnyEvent'ом, вы замерили максимальное время
      последовательных 34 запросов.<br>
      <br>
      Сила AnyEvent'а в том, что в одном процессе вы пожете
      "параллельно" выполнять пару сотен таких задач.<br>
      если-бы у вас урлы были не на одном домене (perl.com), а на
      разных, то можно было-бы отправить их всех одновременно.<br>
      <br>
      PS: в AnyEvent::HTTP есть ограничение на одновременное подключение
      к одному домену.<br>
      попробуй еще добавить<br>
      $AnyEvent::HTTP::
      
      MAX_PER_HOST = 33;<br>
      <br>
      On 10/30/2012 03:43 PM, ksvs wrote:<br>
    </div>
    <blockquote type="cite">
      <div style="color:#000;background-color:#fff;font-family:times new roman, new york, times, serif;font-size:12pt;">
        <div id="yiv2118419149">
          <div>
            <div style="color:#000;background-color:#fff;font-family:times new roman, new york, times, serif;font-size:12pt;">
              <div id="yiv2118419149yui_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>
      <br>
      <fieldset class="yiv2118419149mimeAttachmentHeader"></fieldset>
      <br>
    </blockquote>
    <br>
  </div>

</div><meta http-equiv="x-dns-prefetch-control" content="on"><br>-- <br>Moscow.pm mailing list<br><a ymailto="mailto:moscow-pm@pm.org" href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a><br><br><br> </div> </div>  </div></body></html>