以下代码基本上只允许您并行执行类似(function(range n))的操作.
(experiment-with-agents 10000 10 #(filter prime? %))
Run Code Online (Sandbox Code Playgroud)
例如,这可以使用10个代理查找0到10000之间的素数.
(experiment-with-futures 10000 10 #(filter prime? %))
Run Code Online (Sandbox Code Playgroud)
与期货一样.
现在的问题是,期货的解决方案不会随着更多的期货而更快地运行.例:
; Futures
(time (experiment-with-futures 10000 1 #(filter prime? %)))
"Elapsed time: 33417.524634 msecs"
(time (experiment-with-futures 10000 10 #(filter prime? %)))
"Elapsed time: 33891.495702 msecs"
; Agents
(time (experiment-with-agents 10000 1 #(filter prime? %)))
"Elapsed time: 33048.80492 msecs"
(time (experiment-with-agents 10000 10 #(filter prime? %)))
"Elapsed time: 9211.864133 msecs"
Run Code Online (Sandbox Code Playgroud)
为什么?我做错了什么(可能是Clojure的新手,只是玩弄东西^^)?因为我认为期货在这种情况下实际上是首选的.
资源:
(defn setup-agents
[coll-size num-agents]
(let [step (/ coll-size num-agents)
parts (partition step (range …Run Code Online (Sandbox Code Playgroud) clojure ×1