同时运行灯功能

时间:2013-02-18 11:13:10

标签: clojure

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

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

我想基本上同时运行一些轻量级函数,而不创建线程。我可以这样做吗?

谢谢, 穆尔塔扎

1 个答案:

答案 0 :(得分:5)

你有基准吗?

无论如何,代理可能是一个很好的解决方案,因为它们使用了一个可以重复使用的固定大小的线程池(因此你不会不断创建新的线程)。

我已经在我的机器上快速进行了基准测试,可以在3秒内完成超过百万次座席呼叫:

(def ag (agent 0))

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

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

相关问题