【问题标题】:Coroutines and handling async in clojure(script) best practices?clojure(script) 最佳实践中的协程和处理异步?
【发布时间】:2021-06-24 02:25:23
【问题描述】:

在 clojure 中似乎有无数的“协程”或异步逻辑的实现,Rich Hickey 和其他潜在权威关于此事的许多谈话都是从近十年前开始的,我正试图找出什么是处理这个问题的最新、最棒的最佳实践方法。

我最喜欢这种类型的抽象是 lua 协程,但我认为这可能是一种严格的命令式做事方式,我对函数式方式是什么有点困惑。

在 lua 中,使用协程真的很简单:

A) 空闲等待 X 秒。

B) 非忙等待变量或函数为特定值,如true

A 可能使用 setTimeout 可以实现,但 B 不能,至少我不知道如何。我也不确定 setTimeout 是解决这类问题的最佳做法吗?

【问题讨论】:

    标签: clojure clojurescript


    【解决方案1】:

    a 2013 blog post 中,Rich Hickey 描述了clojure.core.async 的动机。虽然 JVM 有一些应用程序,但主要动机是给单线程 Javascript 环境带来线程的错觉。

    clojure.core.async 提供的“模拟多线程”不如使用实际 JVM 线程(尤其是发生异常/错误时)强大,因此它对 JVM Clojure 的用途有限。当Java virtual threads 成为现实时,这将更加真实。

    因此,如果您使用 ClojureScript,clojure.core.async 总比没有好(即回调地狱)。然而,即使是 JS 也在考虑使用 a multithreading model via WebAssembly,所以将来 ClojureScript 可能会出现 clojure.core.async 的替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-12
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2013-05-09
      • 2011-11-10
      • 1970-01-01
      相关资源
      最近更新 更多