【问题标题】:Resources about Asynchronous Programming Design Patterns关于异步编程设计模式的资源
【发布时间】: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


【解决方案1】:

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

有关这方面的更多信息,您可以查看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,那么您将有不同的实现。

您的设计方式很大程度上受所涉及的语言和技术的影响,因此任何答案都不会是完整的。

【讨论】:

  • 谢谢,詹姆斯。我会考虑应用柯里化。我还编辑了这个问题以包含主要的实现语言,尽管我认为允许传递和返回函数(“回调”)的语言的基本原则是相同的,尽管它可能更方便其他。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多