限制Reducer库的核心

时间:2014-08-16 09:52:09

标签: clojure reducers

我在我的代码中的一些地方使用reducers库,在具有32个内核的生产服务器上利用了一些并行性。但是,Fork / Join框架似乎过于频繁地使用内核,以至于其他进程窒息并且没有响应。

有没有办法限制不行。正在使用的内核或由jvm实例上的reducers库生成的线程?

1 个答案:

答案 0 :(得分:2)

似乎无法通过函数或配置参数调整标准reducer forkjoin线程池大小。您需要更改core.reducers本身。

来自core.reducers来源

(def pool (delay (java.util.concurrent.ForkJoinPool.)))

这与没有参数的默认java构造函数

相对应

<强> ForkJoinPool() 使用默认线程工厂,没有UncaughtExceptionHandler和非异步LIFO处理模式,创建一个并行等于Runtime.availableProcessors()的ForkJoinPool。

而不是

ForkJoinPool(int parallelism) 使用指示的并行级别,默认线程工厂,无UncaughtExceptionHandler和非异步LIFO处理模式创建ForkJoinPool。

至少有一个控制核心数量的选项(还有一个更可配置的ForkJoinPool版本)是一个很好的补充,但是现在唯一的选择是fork core.reducers并将该行更改为您要使用的最大核心数:

(def pool (delay (java.util.concurrent.ForkJoinPool. 28)))