我正在寻找关于异步编程概念的非平凡资源,最好是书籍,还有实质性文章或论文.这不是简单的例子,比如在GUI编程中将回调传递给事件监听器,或者让生产者 - 消费者在队列中解耦,或者为HTML编写onload处理程序(尽管所有这些都是有效的).这是关于lighttpd开发人员可能关心的问题,或者是在浏览器或node.js上运行的JavaScript中运行实质性业务逻辑的人.这是关于需要将回调传递给回调的回调的情况......关于复杂的异步控制流,并保持同时保持理智.我正在寻找允许您系统地执行此操作的概念,以推理这种控制流,以认真管理在深层嵌套回调中分布的大量逻辑,以及随之而来的所有时序,同步,绑定问题价值观,传递背景等
我不会畏缩一些抽象的探索,如延续传递式,线性逻辑或时间推理.像这样的帖子似乎走向正确的方向,但讨论具体问题而不是完整的理论(例如,帖子提到了"反应堆"模式,这似乎是相关的,没有描述它).
谢谢.
编辑:
提供有关我感兴趣的方面的更多细节.我对异步编程的规范方法感兴趣,如果你愿意,可能只是一组特定的模式,我可以传递给其他程序员并说"这是我们在非平凡场景中进行异步编程的方式.我需要一个理论来解开随机无法工作或产生虚假结果的回调层.我想要一种让我说"如果我们这样做,我们可以肯定......"的方法. - 这会让事情更清楚吗?
编辑2:
由于反馈表明对编程语言的依赖:这将是JavaScript,但也许它足以假设一种允许更高阶函数的语言.
编辑3:
将标题更改为更具体(虽然我认为设计模式只是查看它的一种方式;但至少它提供了更好的方向).
在进行分层回调时,柯里化是一种有用的技术。
有关这方面的更多信息,您可以查看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,那么您将有不同的实现。
如何进行设计很大程度上受到所涉及的语言和技术的影响,任何答案都不会完整。