首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClojureScript的core.async实现可以在Clojure中使用吗?

ClojureScript的core.async实现可以在Clojure中使用吗?
EN

Stack Overflow用户
提问于 2014-02-12 10:56:37
回答 2查看 531关注 0票数 4

是否可以在Clojure中使用ClojureScript的基于状态机的core.async实现,而不是Clojure的基于线程的实现?我希望能够在JVM上使用core.async,但不使用线程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-12 18:21:44

目前这是不可能的,但是没有什么可以阻止您修改core.async以支持单个线程模型。所有的调度都是通过clojure.core.async.impl.dispatch/run来处理的,将该函数更改为使用某种其他的调度方法,并且一切都应该正常工作。ClojureScript版本的core.async有一个不同版本的dispatch/run,它使用setTimeout (或其他可能更快的东西)。复制该代码,并修改它以在您的VM上工作,这不应该是很难改变的。

票数 3
EN

Stack Overflow用户

发布于 2014-02-12 13:00:54

在JVM上不可能以严格的单线程方式使用core.async,除非您愿意深入内部,并将用于go的线程池替换为只使用单个线程的线程池。

然而,正如edbond在他的评论中指出的那样,Clojure版本的core.async确实使用状态机来处理go。然后,这些状态机运行在线程池上,线程池的大小限制为处理器+ 42的两倍,因此可以在不使用尽可能多的实际线程的情况下启动数千个go

JVM core.async还提供了一个像go一样工作的thread宏,但是启动真正的线程,再加上一组双击操作(<!!>!!等)。就像他们的单枪匹马一样,但是以一种封闭的方式。是否使用它们取决于您自己;如果您坚持使用go和单击操作系列,core.async将永远不会启动超过上述线程池限制的线程。

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

https://stackoverflow.com/questions/21725911

复制
相关文章

相似问题

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