代码之家  ›  专栏  ›  技术社区  ›  FUD

限制减速器库的核心

  •  1
  • FUD  · 技术社区  · 11 年前

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

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

    1 回复  |  直到 11 年前
        1
  •  2
  •   NielsK    11 年前

    似乎不可能通过函数或配置参数调整标准异径管分叉螺纹池大小。你需要改变 core.reducers 它本身

    来自core.reducers源

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

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

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

    而不是

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

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

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