【问题标题】:Limit cores for reducers library减速器库的限制核心
【发布时间】:2014-10-09 22:20:06
【问题描述】:

我在具有 32 个内核的生产服务器上的代码中的某些地方使用了 reducers 库,以利用一些并行性。但是 Fork/Join 框架似乎对内核的使用如此之多,以至于其他进程阻塞并变得无响应。

有什么方法可以限制数量吗?在 jvm 实例上,reducers 库正在使用的内核或生成的线程?

【问题讨论】:

    标签: clojure reducers


    【解决方案1】:

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

    来自 core.reducers 来源

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

    这对应于没有参数的默认 java 构造函数

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

    而不是

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

    至少可以选择控制内核数量是一个很好的补充(还有一个更可配置的版本 ForkJoinPool),但目前唯一的选择是分叉 core.reducers 并更改该行到您要使用的最大核心数:

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

    【讨论】:

    • 您是否提交了 JIRA 请求?
    • 不,我没有,因为我自己没有遇到这个,所以没有复制/测试配方。
    猜你喜欢
    • 2018-09-10
    • 2018-05-11
    • 2011-08-08
    • 1970-01-01
    • 2014-11-17
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多