【问题标题】:availableProcessors() returns 1 for dualcore phonesavailableProcessors() 为双核手机返回 1
【发布时间】:2012-04-13 00:07:05
【问题描述】:

我最近买了一部 Moto Atrix 2 手机。当我试图查看手机中的处理器规格时, Runtime.getRuntime().availableProcessors() 返回 1。 /proc/cpuinfo 也有关于处理器 0 的信息。

出于好奇,我在我朋友的三星 Galaxy S2 上进行了同样的测试,它又是一款双核手机。这也表明没有。核心数为 1。

我在我的双核 Moto xoom 平板电脑上检查了相同的内容。这次 availableProcessors() 返回 2 并且 cpuinfo 也有处理器 0 和处理器 1 的详细信息。

我很困惑。为什么有些设备携带不同的信息?有人能解释一下这个异常吗?

【问题讨论】:

    标签: java android performance processors


    【解决方案1】:

    Runtime.getRuntime().availableProcessors()只返回在线处理器的数量,所以在第二个核心休眠时会返回1。这样做是为了在资源密集度较低的任务期间保持电力。

    要查看所有可用内核,请查看 /sys/devices/system/cpu/

    【讨论】:

    • 我是这么认为的。但是为什么 /proc/cpuinfo 文件似乎也缺少第二个核心的信息?另外,有没有办法打开另一个核心,然后使用相同的 java 方法进行检查?
    • /proc/cpuinfo 仅显示在线内核。要查看所有可用内核,请查看 /sys/devices/system/cpu/。不幸的是,不,您无法通过您的应用打开第二个核心。
    • @lrAndroid 不确定 Runtime.availableProcessors(),我认为您需要像这样调用类 Runtime.getRuntime().availableProcessors()。否则一个很好的答案。
    【解决方案2】:

    这将为您提供 Android 上的内核数量(基于 this post):

    public static int getCoresCount()
        {
        class CpuFilter implements FileFilter
          {
          @Override
          public boolean accept(final File pathname)
            {
            if(Pattern.matches("cpu[0-9]+",pathname.getName()))
              return true;
            return false;
            }
          }
        try
          {
          final File dir=new File("/sys/devices/system/cpu/");
          final File[] files=dir.listFiles(new CpuFilter());
          return files.length;
          }
        catch(final Exception e)
          {
          return Math.max(1,Runtime.getRuntime().availableProcessors());
          }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 2019-08-30
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多