asynchronous - 关于异步编程设计模式的资源

标签 asynchronous

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

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

谢谢。

编辑:

提供有关我感兴趣的方面的更多细节。我对异步编程的规范方法感兴趣,如果你愿意的话,一个理论,也许只是一组特定的模式,我可以传递给其他程序员并说“这是我们在非平凡场景中进行异步编程的方式。我需要一个理论来解开随机无法工作或产生虚假结果的回调层。我想要一种方法,让我可以说“如果我们这样做,我们可以确定……”。 - 这会让事情变得更清楚吗?

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

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

关于asynchronous - 关于异步编程设计模式的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5936897/

相关文章:

node.js - 我可以在不深入嵌套代码的情况下执行许多异步数据库请求吗?

javascript - node js - 从回调中获取结果

python - 如何确保 concurrent.futures 迭代器中每个 Future 的超时?

javascript - javascript for循环中的异步进程

javascript - 如何解决 Reactjs 和 Firebase Google Cloud Firestore 中发生的此错误?

vb.net - VS.Net 2008 中的 "Asynchronous Processing=true"和 Quickwatch/Watch 问题

javascript - 如何等到 localStorage.setItem 在 Angular 4 中完成

c# - 确保取消某些任务

java - 如何获取 Kubernetes 中 POD 中的特定应用程序(在多个正在运行的应用程序中)提供的特定请求?

node.js - 等待异步方法完成