当我应该使用Clojure的core.async库时,什么样的应用程序需要这种异步的东西?
Clojure提供了4种基本的可变模型,如refs、agents、原子和线程局部变量/vars。这些可变的引用不能以任何方式提供core.async轻松提供的东西吗?
您能为异步编程提供真实的用例吗?
我如何才能理解它,以便当我看到一个问题时,它点击,我说“这是我应该应用core.async的地方”
此外,我们还可以在core.async中使用ClojureScript,这是一个单线程环境,它的优点是什么(除了避免回调地狱)?
发布于 2018-03-18 22:16:27
您不妨阅读以下内容:
core.async的最佳用例是ClojureScript,因为它允许您模拟多线程编程并避免回调地狱。
在JVM中,core.async还可以方便地使用您想要的(轻量级)生产者-消费者体系结构。当然,您也可以在使用本机Java队列中实现这一点。
发布于 2018-03-19 23:01:41
重要的是要指出,在编程圈中,“异步”这个词有两个共同的含义:
core.async对1(通过队列进行异步消息传递)非常固执己见,并为实现绿色线程( go宏)提供了一个宏。
根据我的经验,如果非阻塞是您所需要的全部,我个人建议从流形开始,它对您的用例做了更少的假设,然后在更高级的用例中使用core.async;注意,这两个库的互操作都很好。
发布于 2018-03-19 08:57:49
我发现它对于JVM上的副作用并行性的细粒度、可配置的控制很有用.
例如,如果以下代码执行Cassandra的读取,则返回异步/chan:
(arche.async/execute connection :key {:values {:id "1"}})然后执行一系列并行执行,其中并行性是可配置的,结果按顺序返回。
(async/pipeline-async
n-parallelism
out
#(arche/execute connection :key {:values %1 :channel %2})
(async/to-chan [{:id "1"} {:id "2"} {:id "3"} ... ]))对我的利基来说可能很特别,但你知道。
https://stackoverflow.com/questions/49352562
复制相似问题