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

Ivan Petrov i.petro.77.00 на gmail.com
Ср Июл 24 04:26:10 PDT 2013


>>>> А почему, кстати, голый ЭниЭвент, а не 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 мы практически прямо реализуем то что нам продиктовал
бизнес.
а бизнес он зараза такая что любит вставить задачку в средину цепочки
такую что в каллбечном варианте все переворачивает с ног на голову


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