[Moscow.pm] Вакансия: AnyEvent in Mail.ru

Naim sh shafiev на gmail.com
Ср Июл 24 04:29:03 PDT 2013


On 24/07/13 16:26, Ivan Petrov wrote:
>>>>> А почему, кстати, голый ЭниЭвент, а не Coro, скажем?
>>>>>
>>>> В основном - производительность.
>>> А поподробнее можно? Может я че не заметил, но если там копейки, то выигрыш в читаемости важнее.
>>>
>> Когда последний раз тестировал - получалось что-то типа 20-30%.
>> Особого выигрыша в читаемости лично я не наблюдаю ;)
>> А что касается использования Coro в целом - AnyEvent может работать на
>> чистом perl, без XS'а.
>> Coro - это XS и XS непростой, манипулирующий интерпретатором и стеками.
>> Так что мой итог таков: продавать 20-30% производительности за
>> сомнительную читаемость и потенциальные баги из-за дополнительного
>> XS'а не считаю рациональным.
>> Тем более я знаю, что AnyEvent модули можно обернуть в Coro.
>> Если кому-то это нужно - никто не мешает дописать обертку.
>> В отличие от ситуации наоборот. Если написано на Coro, то Coro уже не выкинешь.
> читаемость не сомнительная.
>
> в Coro например можно использовать exception'ы.
>
> например надо последовательно дернуть 5 http. вернуть ошибку
>
> use AnyEvent::HTTP;
> use Coro;
>
> sub check {
>      my @res;
>      for (@urls) {
>          http_get $_ => Coro::rouse_cb;
>          my ($body, $hdr) = Coro::rouse_wait;
>          die "Не 200 код от $_" unless $hdr->{Status} ~~ 200;
>          push @res => $body;
>      }
>      return \@res;
> }
>
> на AnyEvent такая же поебня будет выглядеть как-то либо в виде "лапши"
> либо в виде async_foreach (AE::Tools).
>
> а если писать именно бизнес код, то есть неодинаковые но
> последовательные запросы а-ля
>
> 1. по кукам вытаскиваем юзера из БД: есть/нет - возможный конец
> 2. по юзеру вытаскиваем роль юзера из БД: есть/нет - возможный конец
> 3. проверяем аутентификацию: есть/нет - возможный конец
> 4. обрабатываем запрос пользователя: запрашиваем n ресурсов
> последовательно/параллельно если что-то не так - возможный конец
> 5. собираем ответ пользователю и отдаем его
>
> то на AE такой код уже становится тяжелым, наполненным каллбеками,
> у новичков очень много где начинает "течь", наполняется weaken'ами итп
>
> а на Coro мы практически прямо реализуем то что нам продиктовал
> бизнес.
> а бизнес он зараза такая что любит вставить задачку в средину цепочки
> такую что в каллбечном варианте все переворачивает с ног на голову

+1 . да вставлять любит, но иногда и должен



Подробная информация о списке рассылки Moscow-pm