首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候在Clojure中使用core.async?

什么时候在Clojure中使用core.async?
EN

Stack Overflow用户
提问于 2018-03-18 20:35:26
回答 4查看 5K关注 0票数 14

当我应该使用Clojure的core.async库时,什么样的应用程序需要这种异步的东西?

Clojure提供了4种基本的可变模型,如refsagents原子线程局部变量/vars。这些可变的引用不能以任何方式提供core.async轻松提供的东西吗?

您能为异步编程提供真实的用例吗?

我如何才能理解它,以便当我看到一个问题时,它点击,我说“这是我应该应用core.async的地方”

此外,我们还可以在core.async中使用ClojureScript,这是一个单线程环境,它的优点是什么(除了避免回调地狱)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-18 22:16:27

您不妨阅读以下内容:

core.async的最佳用例是ClojureScript,因为它允许您模拟多线程编程并避免回调地狱。

在JVM中,core.async还可以方便地使用您想要的(轻量级)生产者-消费者体系结构。当然,您也可以在使用本机Java队列中实现这一点。

票数 10
EN

Stack Overflow用户

发布于 2018-03-19 23:01:41

重要的是要指出,在编程圈中,“异步”这个词有两个共同的含义:

  1. 异步消息传递:在系统中,组件发送消息而不期望用户响应,甚至不知道使用者是谁(通过队列)
  2. 非阻塞(.事件驱动的) I/O:程序的结构方式,使它们不会阻塞昂贵的计算资源(线程、内核、.)在等待回应的时候。处理这样的系统有几种方法,具有不同的抽象级别:基于回调的APIs (低级别的,因为基于副作用而难以管理),(表示我们还没有的值,因为它们是基于值的),Green Threads (模仿普通控制流的“逻辑”线程,但是很便宜)。

core.async对1(通过队列进行异步消息传递)非常固执己见,并为实现绿色线程( go宏)提供了一个宏。

根据我的经验,如果非阻塞是您所需要的全部,我个人建议从流形开始,它对您的用例做了更少的假设,然后在更高级的用例中使用core.async;注意,这两个库的互操作都很好。

票数 9
EN

Stack Overflow用户

发布于 2018-03-19 08:57:49

我发现它对于JVM上的副作用并行性的细粒度、可配置的控制很有用.

例如,如果以下代码执行Cassandra的读取,则返回异步/chan:

代码语言:javascript
复制
(arche.async/execute connection :key {:values {:id "1"}})

然后执行一系列并行执行,其中并行性是可配置的,结果按顺序返回。

代码语言:javascript
复制
(async/pipeline-async
    n-parallelism
    out
    #(arche/execute connection :key {:values %1 :channel %2})
    (async/to-chan [{:id "1"} {:id "2"} {:id "3"} ... ]))

对我的利基来说可能很特别,但你知道。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49352562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档