Ресурсы о шаблонах проектирования асинхронного программирования - PullRequest
8 голосов
/ 09 мая 2011

Я ищу нетривиальные ресурсы по понятиям асинхронного программирования, предпочтительно книги, но также содержательные статьи или статьи.Речь идет не о простых примерах, таких как передача обратного вызова слушателю событий в программировании с графическим интерфейсом пользователя, или отключение производителя-потребителя по очереди, или написание обработчика загрузки для вашего HTML (хотя все они действительны).Речь идет о проблемах, с которыми могут столкнуться разработчики lighttpd или кто-то, занимающийся существенной бизнес-логикой в ​​JavaScript, который работает в браузере или на node.js.Речь идет о ситуациях, когда вам нужно передать обратный вызов обратному вызову обратного вызова ... о сложных асинхронных потоках управления, и в то же время оставаться в здравом уме.Я ищу концепции, которые позволяют вам делать это систематически, рассуждать о такого рода потоках управления, серьезно управлять значительным количеством логики, распределенной в глубоко вложенных обратных вызовах, со всеми вытекающими отсюда проблемами синхронизации, синхронизации, связываниязначения, передача контекстов и т. д.

Я бы не стал уклоняться от некоторых абстрактных исследований, таких как стиль продолжения, линейная логика или временные рассуждения.Посты типа this , кажется, идут в правильном направлении, но обсуждают конкретные вопросы, а не полную теорию (например, в посте упоминается модель «реактора», которая представляется актуальной, без ее описания).

Спасибо.

РЕДАКТИРОВАТЬ:

Чтобы дать более подробную информацию об аспектах, которые меня интересуют. Меня интересует дисциплинированный подход к асинхронному программированию, теория, если хотите, возможнопросто набор конкретных шаблонов, которые я могу передать коллегам-программистам и сказать: «Так мы делаем асинхронное программирование» в нетривиальных сценариях.Мне нужна теория, чтобы распутать слои обратных вызовов, которые случайно не работают, или дают ложные результаты.Я хочу подход, который позволит мне сказать: «Если мы сделаем это таким образом, мы можем быть уверены, что ...».- Делает ли это что-то более понятным?

РЕДАКТИРОВАТЬ 2:

Поскольку обратная связь указывает на зависимость от языка программирования: это будет JavaScript, но, возможно, достаточно предположить, что язык допускает более высокий порядокфункции.

РЕДАКТИРОВАТЬ 3:

Изменен заголовок, чтобы быть более конкретным (хотя я думаю, что шаблоны проектирования - это только один способ взглянуть на него, но, по крайней мере, это дает лучшее направление).

1 Ответ

3 голосов
/ 09 мая 2011

При выполнении многоуровневых обратных вызовов карринг является полезной техникой.

Более подробно об этом вы можете посмотреть на http://en.wikibooks.org/wiki/Haskell/Higher-order_functions_and_Currying, а для javascript вы можете посмотреть на http://www.svendtofte.com/code/curried_javascript/.

В основномЕсли у вас есть несколько уровней обратных вызовов, а не один огромный список параметров, вы можете создавать его постепенно, так что когда вы находитесь в цикле, вызывающем вашу функцию, различные функции обратного вызова уже определены и переданы.

Это не означает, что это полный ответ на вопрос, но меня попросили включить эту часть в ответ, и я это сделал.

После быстрого поиска здесь есть блог, где он показываетиспользуя карринг с обратными вызовами:

http://bjouhier.wordpress.com/2011/04/04/currying-the-callback-or-the-essence-of-futures/

ОБНОВЛЕНИЕ:

После прочтения редактирования исходного вопроса, чтобы увидеть шаблоны проектирования для асинхронного программирования, это может быть хорошей диаграммой: http://www1.cse.wustl.edu/~schmidt/patterns-ace.html, но есть еще много хорошего асинхронного проектирования, так как функции первого порядка позволят упростить это, но если вы используетеВ библиотеке MPI и Fortran у вас будут разные реализации.

То, как вы подходите к дизайну, сильно зависит от языка и используемых технологий, поэтому любой ответ не будет завершенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...