【发布时间】:2011-08-21 16:03:03
【问题描述】:
我正在寻找有关异步编程概念的重要资源,最好是书籍,还有大量文章或论文。这不是简单的示例,例如在 GUI 编程中将回调传递给事件侦听器,或者通过队列分离生产者-消费者,或者为 HTML 编写 onload 处理程序(尽管所有这些都是有效的)。这是关于 lighttpd 开发人员可能关心的问题类型,或者是在浏览器或 node.js 上运行的 JavaScript 中执行大量业务逻辑的人。这是关于您需要将回调传递给回调的情况......关于复杂的异步控制流,同时保持理智。我正在寻找允许您系统地执行此操作的概念,以推理这种控制流,认真管理分布在深度嵌套回调中的大量逻辑,以及随之而来的时间、同步、绑定问题值、上下文传递等。
我不会回避一些抽象的探索,比如延续传递式、线性逻辑或时间推理。 this 之类的帖子似乎朝着正确的方向发展,但讨论的是具体问题而不是完整的理论(例如,帖子提到了“反应器”模式,这似乎很相关,但没有描述它)。
谢谢。
编辑:
提供更多关于我感兴趣的方面的详细信息。我对异步编程的规范方法感兴趣,如果你愿意,可以是一个理论,也许只是一组特定的模式,我可以传递给其他程序员并说“这是我们进行异步编程的方式”在非平凡的场景中。我需要一个理论来解开随机无法工作或产生虚假结果的回调层。我想要一种方法,让我可以说“如果我们这样做,我们可以确定……”。 - 这会让事情更清楚吗?
编辑 2:
由于反馈表明对编程语言的依赖:这将是 JavaScript,但假设一种允许高阶函数的语言可能就足够了。
编辑 3:
将标题更改为更具体(虽然我认为设计模式只是看待它的一种方式;但至少它给出了更好的方向)。
【问题讨论】:
-
krondo(博客)很不错:krondo.com/blog/?page_id=1327
-
与 Twisted 相关的各种其他链接:stackoverflow.com/questions/1888139/…
-
@ypercube 谢谢。我不会放弃研究一个产品(比如 Twisted),但我仍然希望找到更通用的东西。
-
这类似于学习递归。您不需要从大型项目开始,如果您了解河内塔问题,那么您可以扩展它。如果您可以让一个带有回调的函数调用另一个带有回调的函数,那么您可以继续,但是,诀窍是如何定义函数,以便您可以拥有多个层。在这一点上,柯里化是一个你可能想要熟悉的概念。
-
您可能只想查看stackoverflow.com/questions/2911822/… 或谷歌“javascript 回调设计模式”以获得更多想法,但如果您为此设计了一个通用库,那么只需告诉人们使用该库,这就是贵公司处理回调的方式。
标签: asynchronous