为什么 core.async go 块返回一个通道?

2024-02-10

我理解“去块”(无论是go or go-loop或可能的其他构造)返回一个通道。但我一直不明白这个频道的目的。我想知道如何使用它。也许我在不需要的时候创建了额外的频道。


我使用的返回通道go-block 作为句柄,我可以将其传递给另一个想要与完成同步的函数(而不仅仅是宏)go-堵塞。或者,我可以在通道上执行阻塞读取,以保证何时执行go- 块已完成。

这是一个执行双向并行化的简单示例(并不意味着用于任何生产代码来计算总和):

(defn par-sum [coll]
  (let [half-n (/ (count coll) 2)
        [left right] (split-at half-n coll)
        left-sum-chan (async/go (core/reduce + 0 left))
        right-sum (core/reduce + 0 right)
        left-sum (async/<!! left-sum-chan)]
    (+ left-sum right-sum)))

在此示例中,我们并行计算左右总和。 由于我们需要左总和来计算总和,因此我们必须等待结果并检索go-block.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 core.async go 块返回一个通道? 的相关文章

  • 如何在 Clojure 中更新原子的向量元素?

    我有一个矢量原子 我想更新一个本身就是地图的条目 def vector atom atom swap vector atom conj id 1 name myname 我该如何只更新该成员 在可变的 Java 领域的思维方式中 我会做这样
  • Clojure 函数 - 返回最后一条语句之前计算的值

    我有一些用 Clojure 编写的测试 这是一个简单的例子 defn test1 start server run pvt and expect PVT 0 stop server 我想返回 run pvt and expect 的结果 但
  • 如何创建惰性序列向量

    运行它按预期工作 defn long seq n lazy seq cons list n somekey n 2 long seq n 1 take 3 long seq 3 gt 3 somekey 6 4 somekey 8 5 so
  • Clojure/Java:用于声音频谱分析的 Java 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以接受大量音频数据并返回给定频带内随时间变化的平均幅度的库 我已经在 comp dsp
  • 好的 Clojure 代码示例? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在第一次查看 Clojure 我发现查看 Clojure 核心库的 doc xxx 和 sourc
  • 从 JVM 线程本地空间卸载 Clojure 变量

    我正在 Clojure 中为 BaseX 编写一个插件 通过 lein uberjar 构建 并包含 Clojure 解释器 在大多数情况下 这效果很好 然而 当通过 BaseX HTTP 实例运行时 评估在 Jetty 的线程池内进行 而
  • Clojure / Noir:强制 HTTPS,如果请求是 http:// 则重定向到 https://

    我正在尝试在我的网站上强制使用 SSL 我想要一个环形中间件 将网站重定向到与 https 相同的 URL 如果它只是 http 我编写了以下代码 但除了检查请求方案并打印它应该重定向到的 URL 之外 它实际上没有做任何事情 defn h
  • Clojure 中 with-local-vars 和 with-bounds 之间的区别

    Clojure 的文档with local vars http clojuredocs org clojure core clojure core with local vars and with bindings http clojure
  • 将向量作为绑定传递给 for 宏时出现问题

    我有任意数量的列表 我想使用 for 宏来处理它们 我想创建一个传递向量作为绑定的函数 因为列表的数量各不相同 如果我对绑定进行硬编码 它会按我的预期工作 gt def list1 pink green gt def list2 dog c
  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • Clojure读行函数问题

    我试图在我的 Clojure 程序中获取控制台输入 但是当它到达程序的该部分时它给我这个错误 Exception in thread main java lang ClassCastException clojure lang LineNu
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • 为什么 Clojure MySQL 查询结果中出现“M”

    我有一个返回一行的 Clojure 查询 下面是返回行 映射 的部分打印输出 employer percent 0 00M premium 621 44M 这两列在mysql表中分别是decimal 5 2 和decimal 7 2 为什么
  • 如何在 Clojure 中链接 Promise

    在 Scala 中 您可以使用map and flatMap在未来的成功结果上运行函数 val x Future Int val y Future String x map toString 有没有比以下更好的 Clojure 类似物 de
  • 在抛出异常之前重试某件事 3 次 - 在 clojure 中

    我不知道如何在Clojure中实现这段Python代码 for i in range 3 try except e if i 2 raise e else continue else break 我想知道为什么在 Python 中如此简单的
  • 在 Clojure 和其他 Lisp 方言中,在函数名称末尾使用星号的约定是什么?

    请注意 我不是在谈论符号名称中的耳罩 这个问题在Clojure 常量的约定 样式和用法 https stackoverflow com questions 3579063 conventions style and usage for cl
  • 无法删除 IntelliJ/Cursive 中的括号

    我正在使用 IntelliJ Cursive 编写 Clojure 我发现 删除括号的唯一方法就是将其中的内容完全删除 然后才能将括号删除 例如 假设我有以下代码 list 我只想删除左括号 一旦我在左括号上按退格键 IDE 就会忽略此行为
  • Clojure 集合与序列的相等性

    我注意到 Clojure 1 4 似乎很乐意考虑向量等于seq相同的向量 但同样不适用于地图 1 2 seq 1 2 gt true 1 2 seq 1 2 gt false 为什么要这样的行为 这样会有所不同吗 Clojure 的 可以认
  • 确保 Clojure 中只有一个服务实例正在运行/启动/停止的规范方法?

    我正在用 Neo4j 支持的 Clojure 编写一个有状态服务器 它可以服务套接字请求 例如 HTTP 当然 这意味着我需要能够从该服务器内启动和停止套接字服务器 在设计方面 我希望能够在此服务器中声明一个 服务 并启动和停止它 我在 C
  • 如何安装 leiningen 插件?

    如何安装 leiningen 插件 例如 leiningen run 我看到这个叫做 clojars org 的东西 以及如何 推 它 但我没有看到任何关于从中 拉 的东西 如果 Clojars 上有可用的插件 例如 lein run 只需

随机推荐

  • 为什么 Collections 类包含独立(静态)方法,而不是将它们添加到 List 接口中?

    对于所有方法收藏 http java sun com javase 6 docs api java util Collections html需要一个List http java sun com javase 6 docs api java
  • 链接期间未定义对全局变量的引用

    我正在尝试编译一个程序 该程序分为3个模块 对应3个源文件 a c b c and z c z c包含main 函数 它调用函数a c and b c 此外 还有一个函数a c调用一个函数b c 反之亦然 最后还有一个全局变量count它由
  • CentOS 中的 JMeter 整数表达式预期错误

    在 CentOS 中执行 JMeter 脚本时出现以下错误 我的JMeter版本是4 0 Java是1 8 我的脚本在 Windows 中运行良好 这是我的 JMeter 命令和我收到的错误 root localhost bin sh jm
  • 将字符串解析为 datetime64 的 Vaex 函数是什么,相当于 pandas to_datetime,允许自定义格式?

    我有日期字符串 例如 3 24 2020 我想将其转换为datetime64 ns format df2 date pd to datetime df1 str date format m d Y 使用熊猫to datetime在 vaex
  • Android 光传感器未触发事件

    使用光传感器时 我遇到一个问题 即永远不会触发 onSensorChanged 事件 原因是 当侦听器注册时 如果 lux 值保持不变 则不会发生变化 因此不会发生事件 不过 我还是想知道勒克斯值 恒定勒克斯值 0 和恒定勒克斯值 60 0
  • 如何链接 TFS 构建?

    我有一个场景 我想从另一个 TFS 构建调用一个 TFS 构建 第一个执行构建 第二个执行暂存 这将允许我为同一解决方案执行多个自定义暂存 我知道 我可以通过第二个构建中的 exec 任务来完成此任务 并调用 tfsbuild exe 将第
  • 带有 HTTPBody 输入流的 NSURLRequest:流在打开之前发送事件

    我想使用以下方式将大量数据发送到服务器NSURLConnection and NSURLRequest 为此 我创建了一对绑定的NSStreams 使用CFStreamCreateBoundPair 然后我将输入流传递给NSURLReque
  • 如何使用YouTube API检查视频是否受到限制?

    当嵌入这个Youtube 视频 https www youtube com embed dYQ2IyMuPes例如 我们得到This video contains content from who has blocked it from d
  • 旋转的 3d 导航栏

    我正在尝试使用纯 CSS 以及变换 过渡和透视来创建 3d 导航栏 这是我的代码 navbar fixed bottom background transparent navbar perspective width 100 height
  • 最令人烦恼的解析是否带有限定 ID?

    考虑 struct Foo enum bar explicit Foo int struct Baz explicit Baz Foo Baz b Foo Foo bar 1 第 1 行是最令人烦恼的解析吗 Foo bar is a 合格的
  • 检查继承函数的函数签名

    我需要检查容器擦除函数是否返回迭代器 我通常会通过例如检查函数签名促进 但在 boost 类 例如 flat set 的情况下 擦除是继承的 因此检查找不到 但我确实需要它 SFINAE 检查继承的成员函数 https stackoverf
  • Emoji 转 JSON 编码,发布到 Web 服务器

    请帮助我解决发布 JSON 解码表情符号字符时遇到的问题 我有一个 UITextView 这个文本视图可能有表情符号字符 我将数据发布到 Web 服务器 其中 UITextView text 以 JSON 形式呈现 问题是当文本具有表情符号
  • SWIG 从不同模块导入生成的类并打包到当前类中

    我在获取 SWIG 时遇到困难类型映射 java包 http www swig org Doc1 3 Java html java directors typemaps才能正常工作 我尝试制作一个简单版本的问题 但即使这样似乎也失败了 fo
  • python 3 中的 types.ClassType 发生了什么?

    我有一个脚本 我在其中做了一些神奇的事情来动态加载模块 并实例化模块中找到的第一个类 但我不能使用types ClassTypePython 3 中不再这样了 现在执行此操作的正确方法是什么 我想到了 看起来类的类型是 type 下面是如何
  • 如何针对堆栈测试新的 ghc 构建

    我已经构建了 ghc HEAD 我想尝试构建所有 stackage lts 或 nightly 看看它能做多少事情 我所说的任何内容都无法说服 stack 使用我的新 ghc 构建任何东西 我尝试设置如下 stack setup 8 1 2
  • Xamarin 表单,拉动刷新 UWP 中的 listView

    在 Windows 桌面上运行时如何刷新 Xamarin 表单列表 看来我们无法拉动刷新 谢了 Fran ois 在 Xamarin Forms 上的 ListView 中拉动刷新需要您实现这 3 件事 IsPullToRefreshEna
  • 如何从 PowerShell 激活 Conda 环境?

    Version Anaconda https en wikipedia org wiki Anaconda Python distribution 4 8 3 我不能做什么 我不能activate来自 PowerShell 的任何环境 co
  • zlib 库的 pip 安装失败

    当我尝试通过以下命令安装 zlib 时 sudo pip install zlib 我遇到以下错误 Could not find any downloads that satisfy the requirement zlib Cleanin
  • Firebase Cloud Messaging 不同的键

    当前生成的密钥是什么google services json制作项目时的文件 当前密钥 Web API 密钥和服务器密钥之间有什么区别 在哪里可以找到当前密钥 FCM 控制台 我找不到它 目前还没有文档清楚地讨论了在google servi
  • 为什么 core.async go 块返回一个通道?

    我理解 去块 无论是go or go loop或可能的其他构造 返回一个通道 但我一直不明白这个频道的目的 我想知道如何使用它 也许我在不需要的时候创建了额外的频道 我使用的返回通道go block 作为句柄 我可以将其传递给另一个想要与完