我正在寻找关于异步编程概念的非平凡资源,最好是书籍,还有实质性文章或论文。这不是简单的例子,比如在GUI编程中将回调传递给事件监听器,或者让生产者 - 消费者在队列中解耦,或者为HTML编写onload处理程序(尽管所有这些都是有效的)。这是关于lighttpd开发人员可能会关注的问题,或者是在浏览器或node.js中运行的JavaScript中执行大量业务逻辑的人。这是关于需要将回调传递给回调的回调的情况......关于复杂的异步控制流,并保持同时保持理智。我正在寻找允许您系统地执行此操作的概念,以推理这种控制流,以认真管理在深层嵌套回调中分布的大量逻辑,以及随之而来的所有时序,同步,绑定问题价值观,传递背景等等。
我不会畏缩于一些抽象的探索,如延续传递式,线性逻辑或时间推理。像this这样的帖子似乎正朝着正确的方向发展,但讨论具体问题而不是完整的理论(例如,帖子提到“反应堆”模式,这似乎是相关的,没有描述)。
感谢。
编辑:
提供有关我感兴趣的方面的更多细节。我对异步编程的规范方法感兴趣,如果你愿意,可能只是一组特定的模式,我可以传递给其他程序员并说“这是我们在非平凡场景中进行异步编程的方式”。我需要一个理论来解开随机无法工作或产生虚假结果的回调层。我想要一种让我说“如果我们这样做,我们可以肯定......”的方法。 - 这会让事情更清楚吗?
编辑2:
由于反馈表明对编程语言的依赖:这将是JavaScript,但也许它足以假设一种允许更高阶函数的语言。
编辑3:
将标题更改为更具体(虽然我认为设计模式只是查看它的一种方式;但至少它提供了更好的指导。)
答案 0 :(得分:3)
进行分层回调时,currying是一种有用的技术。
有关详情,请查看http://en.wikibooks.org/wiki/Haskell/Higher-order_functions_and_Currying,对于javascript,您可以查看http://www.svendtofte.com/code/curried_javascript/。
基本上,如果你有多层回调,而不是有一个大型参数列表,你可以逐步建立它,这样当你在循环中调用你的函数时,已经定义了各种回调函数,并且过去了。
这并不是对这个问题的完整答案,但我被要求将这部分放到答案中,所以我做了。
在快速搜索之后,这里有一个博客,其中显示使用currying with callbacks:
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,那么你将有不同的实现。
您接触设计的方式受到所涉及的语言和技术的严重影响,任何答案都无法完成。