gpt4 book ai didi

Java 线程池大小和 availableProcessors()

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:46 29 4
gpt4 key购买 nike

我有一个程序(全天)并行运行任务(要执行的任务中没有 I/O),所以我使用 Executors.newFixedThreadPool(poolSize) 来实现它。

最初我将 poolSize 设置为 Runtime.getRuntime().availableProcessors(),但我有点担心使用所有可用的内核,因为还有其他进程在同一台 PC 上运行(32 核)。

特别是我有十个其他 JVM 运行相同的程序(在不同的输入数据上),所以我有点担心在可用内核之间切换线程方面可能会有很多开销,这可能会减慢速度整体计算。

我该如何决定每个程序/JVM 的池大小?

此外,在我的 PC 中,还有其他进程一直在运行(防病毒、备份等)。我也应该考虑这些吗?

最佳答案

任何建议都将取决于您的具体情况。 32 个内核上的 10 个 JVM 将建议每个 3 个线程(忽略垃圾收集线程、计时器任务等...)

您还有其他任务正在运行。调度程序将确保它们正在运行,但它们是否必须响应?比 JVM 响应更快?如果您运行的是 Linux/Unix,那么您还可以使用优先级(通过 nice)来确保特定进程不会占用 CPU。

您最终运行了 10 个 JVM。那会导致分页吗?如果是这样,那会很慢,您最好运行较少的 JVM 以避免消耗太多内存。

只需确保您的关键变量公开且可配置,并测量各种场景以找到最佳场景。

关于Java 线程池大小和 availableProcessors(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323379/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com