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