相关疑难解决方法(0)

Clojure的平行剂量

我根本没有在Clojure中使用多线程,所以不确定从哪里开始.

doseq的身体可以并行运行.我想要的是总是有3个线程运行(留下1个核心空闲),并行地评估主体直到范围耗尽.没有共享状态,没有什么复杂的 - 相当于Python的多处理就可以了.

所以类似于:

(dopar 3 [i (range 100)]
  ; repeated 100 times in 3 parallel threads...
  ...)
Run Code Online (Sandbox Code Playgroud)

我应该从哪里开始寻找?有这个命令吗?标准包装?一个很好的参考?

到目前为止,我已经找到了pmap,并且可以使用它(我如何一次限制为3?看起来它一次使用32个 - 不,源说2 +处理器数量),但似乎这是一个基本原语应该已经存在于某处.

澄清:我真的想控制线程的数量.我有长时间运行的进程并使用相当数量的内存,所以创建一个大数字并希望事情正常运行OK不是一个好方法(例如使用重要的块可用内存).

更新:开始写一个执行此操作的宏,我需要一个信号量(或一个互斥量,或者我可以等待的原子).Clojure中是否存在信号量?或者我应该使用ThreadPoolExecutor?从Java中提取这么多内容似乎很奇怪 - 我认为Clojure中的并行编程应该很容易......也许我正在考虑这完全错误的方式?嗯.代理?

parallel-processing multithreading clojure

16
推荐指数
3
解决办法
5455
查看次数