29.12.2013 22:56, Михаил Монашёв wrote:

Или  может  даже  более  правильный  вопрос: как голову переключить на
асинхронное программирование?

Про расово верный подход уже написали, но лучше с точки зрения
надёжности код при минимуме трудозатрат - всё-таки сопрограммы.

Есть проверенные платформы - Go (лучшее решение, на мой взгляд),
Stackless Python (моя давняя любовь), есть Perl Coro (не пробовал, но
теоретически - то же самое).

Как то уже втянулся писать без сопрограмм.

Я один большой проект на ноде сделал (больше года писали) - и там любая более-менее сложная логика (запрос к нескольким бэкендам, слияние результатов, обработка таймаутов и ошибок) даже с использованием модулей типа async выглядит ужасно. Любой случайно пропущенный callback() приводит к зависанию логики. Необработанные исключения - то же самое. Со временем привыкаешь не делать такие ошибки (мозг перестраивается), но каждый новый человек на проекте - это те же самые грабли снова и снова.

А чем именно Go так хорош?

Во-первых, он разрабатывался именно для асинхронного программирования, с всеми паттернами ввода-вывода в распределённых системах в уме.

Во-вторых, он автоматически использует несколько ядер, раскидывая по ним сопрограммы. Настолько автоматически, что перед блокирующими системными вызовами все сопрограммы, которые в том же потоке выполнялись, автоматически мигрируют в другие потоки.

В-третьих, правильная работа с буферами. Почти как в V8, только программист явно управляет копированием, чтобы случайно лишних копирований не сделать.

--
Alexander Lourier
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить