2012-04-13 24 views
10

Gần đây tôi đã mua điện thoại di động Moto Atrix 2. Khi tôi cố gắng nhìn vào thông số kỹ thuật xử lý trong điện thoại, Runtime.getRuntime(). AvailableProcessors() trở 1. /proc/cpuinfo quá có thông tin về chỉ xử lý 0.availableProcessors() trả về 1 cho điện thoại dualcore

Ra khỏi tò mò tôi đã kiểm tra cùng trong Samsung Galaxy S2 của bạn tôi, một lần nữa là một điện thoại lõi kép. Điều này cũng cho thấy không. của các lõi là 1.

Tôi đã kiểm tra tương tự trong máy tính bảng Moto xoom của mình, một lõi kép nữa. Thời gian này availableProcessors() trả về 2 và cpuinfo cũng có cả bộ vi xử lý 0 và bộ xử lý 1 chi tiết.

Tôi đang bối rối. Tại sao một số thiết bị mang thông tin khác nhau? Ai đó có thể giải thích sự bất thường này?

Trả lời

16

Runtime.getRuntime().availableProcessors() chỉ trả lại số bộ xử lý trực tuyến, vì vậy nó sẽ trả về 1 khi lõi thứ hai đang ngủ. Điều này được thực hiện để bảo toàn quyền lực trong các nhiệm vụ tốn ít tài nguyên hơn.

Để xem tất cả các lõi có sẵn, nhìn vào/sys/thiết bị/hệ thống/cpu/

+0

Tôi cũng nghĩ vậy . Nhưng tại sao là/proc/cpuinfo tập tin quá dường như bị thiếu thông tin về lõi thứ 2? Ngoài ra, có cách nào để bật lõi khác và sau đó kiểm tra điều này bằng cách sử dụng cùng một phương pháp java? – M10TheMist

+0

/proc/cpuinfo chỉ hiển thị các lõi trực tuyến. Để xem tất cả các lõi có sẵn, hãy xem/sys/devices/system/cpu /. Và thật không may, không, bạn không thể bật lõi thứ hai thông qua ứng dụng của mình. – lrAndroid

+0

Cảm ơn IrAndroid .. Hoàn hảo! – M10TheMist

0

Điều này sẽ giúp bạn có được số lõi trên Android (dựa trên 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()); 
     } 
    } 
Các vấn đề liên quan