为什么Java availableProcessors API在同一运行期间会不断变化?

时间:2018-06-29 16:33:13

标签: multithreading amazon-web-services parallel-processing java-api processors

我正在使用Runtime.getRuntime.availableProcessors()创建我的线程池。在我们自己的物理数据中心上,它过去返回的cpus数为8,并且从未改变。然后,每次有一个请求(数据密集型)出现时,我们都使用相同的availableProcessors API对数据进行分区,并且该线程池的每个线程都会处理这些分区之一。

但是,最近我们切换到AWS(和Docker作为容器),并且每次请求(数据密集型)到来,并且想要对数据进行分区并因此调用该API时,它都会返回一个不同的数字。示例:

使用的分区数:[X = 12] [Y = 15] [Z = 12] [W = 5] [Q = 15] [P = 3]

这不好。如果在我们创建线程池availableProcessors时为3,并且在请求进入并为数据分区时为15,该怎么办?

我知道API文档说:

  

返回Java虚拟机可用的处理器数量。

     

在虚拟机的特定调用期间,此值可能会更改。因此,对可用处理器数量敏感的应用程序应该偶尔轮询此属性并适当地调整其资源使用情况。

但是我的问题是

  1. 为什么以前从未更改过它(总是返回8),为什么它在AWS上发生了如此大的变化,以及是否有解决方法?
  2. 如果没有办法解决,如何修改应用程序以确保线程池和分区兼容?

谢谢

0 个答案:

没有答案