availableProcessors() возвращает 1 для двухъядерных телефонов

Недавно я купил мобильный Мото Atrix 2. Когда я попытался просмотреть спецификации процессора в телефоне, Runtime.getRuntime(). AvailableProcessors() вернул 1. /proc/cpuinfo тоже содержал информацию только о процессоре 0.

Из любопытства я проверил то же самое в Samsung Galaxy S2 моего друга, который снова является двухъядерным телефоном. Это тоже показало, что нет. ядер 1.

Я проверил то же самое в своем планшете Moto xoom, который снова является двухъядерным. На этот раз availableProcessors() вернул 2, а cpuinfo также содержал детали процессора 0 и процессора 1.

Я сбит с толку. Почему некоторые устройства несут различную информацию? Может кто-нибудь объяснить эту аномалию?

2 ответа

Решение

Runtime.getRuntime().availableProcessors() возвращает только количество онлайн-процессоров, поэтому он вернет 1, когда второе ядро ​​спит. Это сделано для того, чтобы сохранить энергию во время менее ресурсоемких задач.

Чтобы увидеть все доступные ядра, посмотрите /sys/devices/system/cpu/

Это даст вам количество ядер на Android (на основе этого поста):

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());
      }
    }
Другие вопросы по тегам