[Moscow.pm] HTTPD на короутинах

Vladimir Timofeev vovkasm на gmail.com
Пт Май 25 13:00:38 PDT 2012


25 мая 2012 г., 15:43 пользователь Ivan Petrov
<i.petro.77.00 на gmail.com> написал:
> спасибо всем за флейм, а все-таки о сабже.
> Никто не делал HTTPD на короутинах? посоветуйте что-то готовое?
>
> я нашел Corona на cpan. есть отзывы?
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

Проверил сейчас Corona, вроде работает на "Hello, world!", на чем-то
сложном долго проверять.
Даже не свалилось при LIBEV_FLAGS=8 - это включение kqueue на FreeBSD
в дефолтовом цикле у libev.

Детально я все это щупал года 1.5 - 2 назад. Тогда было так (целевая
платформа FreeBSD):
* Coro - сплошные core-дампы на FreeBSD, получались только простейшие
вещи из документации, шаг вправо, шаг влево - core.
* Corona - не работала вообще
* EV - основной цикл в kqueue не работал, приходилось делать его в
select, а уже в него вставлять embedded loop на kqueue для основной
работы. (А еще ему нужен линкинг с pthreads для pthread_atfork, что
добавляло балаган в порядок следования "use" для разных XS-модулей)

Теперь мысли в слух. В принципе контекст выполнения в Perl довольно
"развесистый" - штук 5 стеков + дофига глобальных сущностей, типа
$1,$2 и т.п. А прерывание нормальной цепочки выполнения вставкой cede
потребует сохранения этого стейта, что наверняка не быстро (если
сравнивать со "звездообразным" графом передачи управления при работе с
eventloop'ами). Плюс не очень безопасно, т.к. можно что-то забыть,
плюс головная боль, т.к. все это может меняться от версии к версии.
Поэтому мое имхо таково:
1. Для серьезных проектов я лично Coro юзать пока не собираюсь.
2. Без поддержки в языке, короутины будут медленнее, чем eventloop. И
для меня это замедление не стоит  "спрямления" логики выполнения из
коллбэков в прямолинейный код.

-- 
Vladimir Timofeev <vovkasm на gmail.com>

# Не говорить с человеком, с которым можно говорить, значит потерять человека;
# говорить с человеком, с которым нельзя говорить, значит терять слова.
# Умный человек не теряет человека и не теряет слов.
#-- Конфуций


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