AvailableProcessors() возвращает 1 для телефонов с двойным номером

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

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

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

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

Ответ 1

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

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

Ответ 2

Это даст вам количество ядер на 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());
      }
    }