- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我编写更多 core.async 代码时,出现的一种非常常见的模式是循环,它在一系列 channel 上进行切换并执行一些工作来响应消息,例如:
(go-loop [state {}]
(let [[value task] (alts! tasks)]
...work...
(recur state))
尽管如此,我觉得我并不理解实际完成这项工作的各种方法的权衡,所以我想我应该尝试在这里探索它们。
此摘要正确且全面吗?
最佳答案
如果要完成的工作完全受CPU限制,那么我可能会在go
block 中内联完成它,除非它是一个可能需要很长时间的操作并且我想要 >go
阻止继续响应其他消息。
一般来说,任何不阻塞、 sleep 或执行 I/O 的工作都可以安全地放入 go
block 中,而不会对系统的吞吐量产生重大影响。
您可以使用 >!
将工作提交给一个工作人员或工作人员池。我几乎不会在 go
block 中使用 >!!
,因为它会阻塞分配给正在运行的 go
block 的有限数量的线程之一。
当您需要执行 I/O 或可能需要长时间运行的计算时,请使用 thread
而不是 go
。这与 future
非常相似 - 它创建一个真正的线程 - 但它返回一个类似 go
的 channel 。
put!
是一个较低级别的操作,通常在 core.async 的“边界”使用,将其连接到传统的基于回调的接口(interface)。很少有理由在 go
中使用 put!
。
core.async 可以支持对线程创建方式的细粒度控制。我在博客文章 Parallel Processing with core.async 中演示了一些可能性。 .
关于clojure - 在 clojure core.async go-loop 中工作的方式有哪些权衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24915034/
我正在寻找想法/方向来解决我遇到的问题: 上下文:我有 1000 天的每小时时间序列数据(即每天 24 小时的一行特征)。对于每一个小时,我都试图预测一个目标值。现在,我更关心一天中某些时间的准确性(
我正在阅读有关 Scala 的 actor 的信息,所以假设我们有类似的内容: object Worker extends Actor { def act() { while(true)
在 Yii2 中,使用 Html::activeDropDownList,我可以以如下形式提交数据: 'multiple', 'class' => 'multiselect', ]
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
我正在研究潜在的免费/付费应用程序的硬件/软件要求(最终目标是移动 Java 应用程序)。 应用程序将从这个简单的目标开始:给定数据库中相关单词的列表,以便能够对单个字符串输入进行单词补全。 换句话说
我是一名优秀的程序员,十分优秀!