Clojure 减速器库的极限型芯

Clojure 减速器库的极限型芯,clojure,reducers,Clojure,Reducers,我在一台32核的生产服务器上的代码中的一些地方使用了reducers库,以利用一些并行性。但是Fork/Join框架似乎大量使用了内核,以至于其他进程被阻塞而变得无响应 是否有某种方法可以限制jvm实例上reducers库使用的内核数或生成的线程数?似乎无法通过函数或配置参数调整标准reducers forkjoin线程池大小。您需要更改core.reducer本身 从核心。还原源 (def pool (delay (java.util.concurrent.ForkJoinPool.)))

我在一台32核的生产服务器上的代码中的一些地方使用了reducers库,以利用一些并行性。但是Fork/Join框架似乎大量使用了内核,以至于其他进程被阻塞而变得无响应


是否有某种方法可以限制jvm实例上reducers库使用的内核数或生成的线程数?

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

从核心。还原源

(def pool (delay (java.util.concurrent.ForkJoinPool.)))
这与没有参数的默认java构造函数相对应

ForkJoinPool() 使用默认线程工厂、无UncaughtExceptionHandler和非异步后进先出处理模式创建并行度等于Runtime.availableProcessors()的ForkJoinPool

而不是

ForkJoinPool(int并行) 创建具有指定并行级别、默认线程工厂、无UncaughtExceptionHandler和非异步LIFO处理模式的ForkJoinPool

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

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

你提出JIRA请求了吗?不,我没有,因为我自己没有遇到过,所以没有复制/测试配方。