clojure - clojure(script) 最佳实践中的协程和处理异步?
问题描述
clojure 中似乎有无数的“协程”或异步逻辑的实现,Rich Hickey 和其他潜在权威关于此事的许多谈话都是从近十年前开始的,我正试图找出最新的以及处理此问题的最佳最佳实践方法。
对于这类事情,我最喜欢的抽象是 lua 协程,但我认为这些可能是一种严格的命令式做事方式,而我对函数式方式是什么有点困惑。
虽然在 lua 中使用协程非常简单易行:
A) 空闲等待 X 秒。
B)非忙等待变量或函数为特定值,例如true
A 可能可以使用 setTimeout 来实现,但 B 不能,至少我不知道怎么做。我也不确定 setTimeout 是解决这些类型问题的最佳做法吗?
解决方案
在2013 年的博客文章中,Rich Hickey 描述了clojure.core.async
. 虽然 JVM 有一些应用程序,但主要动机是给单线程 Javascript 环境带来线程的错觉。
所提供的“模拟多线程”clojure.core.async
不如使用实际 JVM 线程(尤其是发生异常/错误时)健壮,因此它对 JVM Clojure 的用途有限。当Java 虚拟线程成为现实时,这将更加真实。
所以如果你在 ClojureScript 中,clojure.core.async
总比没有好(即回调地狱)。然而,即使是 JS 也在考虑通过 WebAssembly 建立多线程模型clojure.core.async
,因此将来 ClojureScript 可能存在替代方案。
推荐阅读
- image - 如何使用 Golang 设置 DPI?
- typescript - Gmail 插件导出功能
- python - iterator.groupby() 无法生成正确的结果
- .net - 来自 vb.net 2017 的 win xp 和 win 7 安装文件
- aws-lambda - 如何从 lambda 触发器将消息返回给 SQS
- javascript - React-md 按钮显示
- python - GroupMe 机器人不发送图像及其文本
- c++ - 新文件系统库和 clang++7 的未定义引用错误
- jquery - 通过 html 按钮执行“点击”jquery 命令的 Cron 作业
- r - 使用 Tidyverse 同时收集不同类的多个变量