2012-04-13 8 views
10

me acaba de comprar un Moto Atrix 2 móvil. Cuando traté de mirar las especificaciones del procesador en el teléfono, Runtime.getRuntime(). AvailableProcessors() devuelto 1. /proc/cpuinfo también tenía información sobre solo procesador 0.availableProcessors() devuelve 1 para los teléfonos DualCore

Por curiosidad he comprobado la misma en el Samsung Galaxy S2 de mi amigo, que es nuevamente un teléfono de doble núcleo. Esto también demostró que no. de núcleos es 1.

he comprobado el mismo en mi tableta Xoom Moto que es de nuevo de doble núcleo. Esta vez availableProcessors() devolvió 2 y cpuinfo también tenía detalles de procesador 0 y procesador 1.

estoy confundido. ¿Por qué algunos dispositivos llevan información diferente? ¿Alguien puede explicar esta anomalía?

Respuesta

16

Runtime.getRuntime().availableProcessors() sólo devuelve el número de procesadores en línea, por lo que volverá 1 cuando el segundo núcleo está durmiendo. Esto se hace con el fin de preservar el poder durante tareas menos intensivas en recursos.

para ver todos los núcleos disponibles, mira a/sys/devices/system/cpu/

+0

me lo imaginaba . ¿Pero por qué ese archivo/proc/cpuinfo también parece estar faltando información en el segundo núcleo? Además, ¿hay alguna manera de activar el otro núcleo y luego verificar esto usando el mismo método de Java? – M10TheMist

+0

/proc/cpuinfo solo muestra los núcleos en línea. Para ver todos los núcleos disponibles, consulte/sys/devices/system/cpu /. Y desafortunadamente, no, no puedes activar el segundo núcleo a través de tu aplicación. – lrAndroid

+0

Gracias IrAndroid .. ¡Perfecto! – M10TheMist

0

Esto le dará el número de núcleos en Android (basado en 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()); 
     } 
    } 
Cuestiones relacionadas