[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