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());
}
}