[Moscow.pm] Стиль асинхронного программирования
Alexander Lourier
aml на rulezz.ru
Вс Дек 29 14:21:19 PST 2013
29.12.2013 22:56, Михаил Монашёв wrote:
>>> Или может даже более правильный вопрос: как голову переключить на
>>> асинхронное программирование?
>
>> Про расово верный подход уже написали, но лучше с точки зрения
>> надёжности код при минимуме трудозатрат - всё-таки сопрограммы.
>
>> Есть проверенные платформы - Go (лучшее решение, на мой взгляд),
>> Stackless Python (моя давняя любовь), есть Perl Coro (не пробовал, но
>> теоретически - то же самое).
>
> Как то уже втянулся писать без сопрограмм.
Я один большой проект на ноде сделал (больше года писали) - и там любая
более-менее сложная логика (запрос к нескольким бэкендам, слияние
результатов, обработка таймаутов и ошибок) даже с использованием модулей
типа async выглядит ужасно. Любой случайно пропущенный callback()
приводит к зависанию логики. Необработанные исключения - то же самое. Со
временем привыкаешь не делать такие ошибки (мозг перестраивается), но
каждый новый человек на проекте - это те же самые грабли снова и снова.
> А чем именно Go так хорош?
Во-первых, он разрабатывался именно для асинхронного программирования, с
всеми паттернами ввода-вывода в распределённых системах в уме.
Во-вторых, он автоматически использует несколько ядер, раскидывая по ним
сопрограммы. Настолько автоматически, что перед блокирующими системными
вызовами все сопрограммы, которые в том же потоке выполнялись,
автоматически мигрируют в другие потоки.
В-третьих, правильная работа с буферами. Почти как в V8, только
программист явно управляет копированием, чтобы случайно лишних
копирований не сделать.
--
Alexander Lourier
Подробная информация о списке рассылки Moscow-pm