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

exu*_*ero 4 clojure clojurescript core.async

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

Mic*_*zyk 7

除非您愿意进入内部并将用于gos 的线程池替换为仅使用单个线程的线程池,否则无法以严格的单线程方式在JVM上使用core.async .

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

JVM还core.async提供了一种thread工作方式类似于宏go,但推出真正的线程,加上双响业务(集合<!!,>!!这工作就像他们的单爆炸对口等),但在阻塞的方式.你是否使用它们取决于你; 如果您坚持go使用单一操作系列,则core.async将永远不会启动超出上述线程池限制的任何线程.

  • 起初,为了答案的目的,我认为"42"是一个可爱的笑话,但后来我检查了[代码](https://github.com/clojure/core.async/blob/76b25bf91c670b0c3542ed9cb687ff29fb2183a7/src/main/ clojure/clojure/core/async/impl/exec/threadpool.clj#L21)看到它真是一个可爱的笑话.:-) (2认同)