Clojure 同时运行灯光功能

Clojure 同时运行灯光功能,clojure,Clojure,我有轻CPU密集型功能,我想并行运行。我应该使用的并发原语是什么 使用代理和期货是不值得的,因为为这些过程创建新线程的成本是不合理的 基本上,我希望在不创建线程的情况下,在中同时运行一些light函数。我可以这样做吗 谢谢, Murtaza您有基准测试吗 代理可能是一个很好的解决方案,因为它们使用一个固定大小的线程池,可以重复使用(所以您不会不断创建新线程) 我已经在我的机器上快速进行了基准测试,可以在3秒内完成超过百万次的代理调用: (def ag (agent 0)) (time (dot

我有轻CPU密集型功能,我想并行运行。我应该使用的并发原语是什么

使用代理和期货是不值得的,因为为这些过程创建新线程的成本是不合理的

基本上,我希望在不创建线程的情况下,在中同时运行一些light函数。我可以这样做吗

谢谢, Murtaza

您有基准测试吗

代理可能是一个很好的解决方案,因为它们使用一个固定大小的线程池,可以重复使用(所以您不会不断创建新线程)

我已经在我的机器上快速进行了基准测试,可以在3秒内完成超过百万次的代理调用:

(def ag (agent 0))

(time (dotimes [i 1000000] (send ag inc)))
=> "Elapsed time: 2882.170586 msecs"

如果代理仍然太重(不太可能?),那么您可能应该寻找一种方法,将一组函数批处理到单个工作块中。如果您这样做,那么并发原语的开销将是最小的。

您可能需要的是协同例程,但我不确定是否存在一个用于clojureYes的轻进程实现,如在Erlang中,这将是一个不错的选择。Mikera感谢您的回答。不,我还没有基准测试,因为我正在写下最初的设计。因此,创建线程的开销是可以避免的,但是在上下文切换中会产生多少开销呢?有关于这方面的统计数据吗?@mikera:你声称“每秒超过300万个代理电话”,但这不是“超过了第三万个”吗?打了一百万个电话就快三秒钟了。。。