有关异步编程设计模式的资源



我正在寻找有关非同步编程概念的重要资源,最好是书籍,但也有大量的文章或论文。这与简单的示例无关,例如在 GUI 编程中将回调传递给事件侦听器,或者在队列上分离生产者-消费者,或者为 HTML 编写加载处理程序(尽管所有这些都是有效的)。这是关于lighttpd开发人员可能关心的问题类型,或者有人在浏览器中或node.js上运行的JavaScript中执行大量业务逻辑。这是关于您需要将回调传递给回调的情况,回调传递到回调......关于复杂的异步控制流,同时保持理智。我正在寻找允许您系统地执行此操作的概念,对这种控制流进行推理,认真管理分布在深度嵌套回调中的大量逻辑,以及随之而来的所有时间、同步、值绑定、上下文传递等问题。

我不会回避一些抽象的探索,比如延续传递风格、线性逻辑或时间推理。像这样的帖子似乎朝着正确的方向发展,但讨论的是具体问题而不是完整的理论(例如,帖子提到了"反应堆"模式,这似乎是相关的,但没有描述它)。

谢谢。

编辑:

提供有关我感兴趣的方面的更多详细信息。我对异步编程的纪律方法感兴趣,如果你愿意的话,这是一个理论,也许只是一组特定的模式,我可以传递给程序员同行,并在非平凡的场景中说"这是我们进行异步编程的方式"。我需要一个理论来解开随机不起作用或产生虚假结果的回调层。我想要一种方法,允许我说"如果我们这样做,我们可以确定......"。- 这让事情更清楚了吗?

编辑2:

正如反馈表明对编程语言的依赖:这将是JavaScript,但也许假设一种允许高阶函数的语言就足够了。

编辑3:

将标题更改为更具体(尽管我认为设计模式只是看待它的一种方式;但至少它给出了更好的方向)。

在进行分层回调时,currying是一种有用的技术。

有关这方面的更多信息,您可以查看 http://en.wikibooks.org/wiki/Haskell/Higher-order_functions_and_Currying,对于javascript,您可以查看 http://www.svendtofte.com/code/curried_javascript/。

基本上,如果你有多层回调,而不是一个庞大的参数列表,你可以增量地构建它,这样当你在循环调用你的函数时,各种回调函数已经被定义并传递了。

这并不是对这个问题的完整回答,但我被要求把这部分放在一个答案中,所以我做了。

快速搜索后,这里有一个博客,他展示了使用currying和回调:

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,那么您将有不同的实现。

你如何处理设计受到所涉及的语言和技术的严重影响,任何答案都不完整。

最新更新