Android - 更有效地使用CPU核心

时间:2014-08-22 13:33:00

标签: android multithreading

Android:OS 4.1.2

我运行的系统有4个CPU内核,我正在运行多线程应用程序。有时活动线程的数量会增加到3或4.但我发现CPU只使用一个或两个内核。它保持线程不运行。我捕获了TraceView,它表明理想情况下2个线程可以在2个CPU内核上同时运行。但最初只分配了一个CPU核心。执行在这两个线程之间交替一段时间。最后,在大约200-300ms之后,为这两个线程分配了2个核心。

请注意,CPU管理器设置为“交互式”。

我错过了一些配置,一些设置,一些编程错误?

2 个答案:

答案 0 :(得分:4)

  

我错过了一些配置,一些设置,一些编程错误?

没有。关于启动多少内核以及这些内核做什么的决定取决于操作系统和设备制造商,而不是我们作为应用程序开发人员。

答案 1 :(得分:0)

不。

芯片组制造商在功耗,核心使用和核心频率方面做出了权衡。驱动程序将关闭时钟或关闭核心以节省电量。如果你没有做任何非常耗费CPU的事情会导致两个内核需要打开且频率最高,那么在一个内核上执行两个线程很可能是正确的选择。 CommonsWare是正确的,因为这些是芯片组制造商最有能力做出的决定。

如果您很好奇并拥有一个有根设备,您可以验证每个内核的当前时钟速度,如下所示:

adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
adb shell cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq

(免责声明:仅用于测试目的)你也可以强制你的核心达到最大频率:

adb shell "echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"  

交互式调控器是导致CPU频率根据需求而变化的原因。

当然,如果你强制你的CPU频率达到最大值,你就可以立刻烧掉你的电池。