美文网首页
CPU性能优化

CPU性能优化

作者: 付小影子 | 来源:发表于2024-05-09 15:03 被阅读0次

    CPU 问题无非分为以下三类:

    CPU 资源冗余使用

    关于这个问题,可以是算法太糙,明明可以遍历一次的却遍历两次,主要出现在查找、排序、删除等环节;也可以是没有 cache ,明明解码过一次的图片还重复解码。还有,明明使用 int 就足够,偏偏
    要用 long ,导致 CPU 的运算压力多出 4 倍。

    CPU 资源争抢

    资源争抢也有几种经典情况。
    ( 1 )抢主线程的 CPU 资源。这是最常见的问题,关键是主线程起码在 Android
    Handler 优化。
    6.0 版之前,没有 renderthread 的时候,其繁忙程度就决定了是否会引发用户的卡顿问题。最经典的例子就是主线程的
    ( 2 )抢音视频的 CPU 资源。跟主线程的情况不同,音视频编解码本身就消耗了大量的 CPU 资源,同时音视频编解码对于解码的速度是有硬要求的,达不到就会有产生播放流畅度的问题,试想下,听
    歌的时候总卡,是不是很难受。所以最常见的一种情况就是 CPU 满负载,除了在耗电上有非常恶劣的影响外,还会让音视频没有足够的资源保持流畅播放。怎么办?通过两点挪走压垮骆驼的稻草:第
    一、排除非核心业务的消耗,如下面说的 QQ 音乐的案例,还有贴耳检测的频率控制;第二、优化自身的性能消耗,把 CPU 负载转化为 GPU 负载,最经典的就是利用 renderscript 来处理视频中的影像信息。
    ( 3 )大家平等,相互抢。前面两点都有主次之分,强弱之别,但是如果是 QQ 相册,我开了 20 个线程做图片解码,那就是相互抢,我们曾经就遇到过这样的问题,效果就是导致图片的显示速度非常
    慢。这简直就是三个和尚没水喝的典型案例。因此按照核心数、控制线程数还是很有道理的。

    CPU 资源利用率低

    CPU 就是速度与负载的博弈,用得多会耗电、会卡顿,用得少也会有问题,像启动、界面切换、音视频编解码这些场景,为了保证其速度,不好好利用 CPU ,真对不起核心数的不断飙升。而导致无
    法充分利用 CPU 的因素,除了前面说的磁盘和网络 I/O 外,还有锁操作、 sleep 等。其中锁的优化,一般在锁的范围上,主要是尽可能地缩减范围

    1 . TOP 软件
    TOP 软件大家应该是非常熟悉的了,依靠 adb shell top 就可以简单地列出进程的各种信息。缺点就是 TOP 本身的性能消耗就不少,所以我们在自动化测试里面的取值,一般不用 TOP 。下面举几个 TOP 的
    小例子,如图 4-1 所示。


    Screenshot_2024-05-10_14-29-16.png

    ( 1 )排除 0 %的进程信息: adb shell top | grep -v ' 0 % S ' 。
    ( 2 )只打印 1 次按 CPU 排序的 TOP 10 的进程信息: adb shell top -m 10 -s cpu -n 1 。
    ( 3 )指定进程的 CPU 、内存等消耗,并设置刷新间隔: adb shell top -d 1 | grep com.tencent.mobileqq 。
    2 . PS 软件
    adb shell ps -p -t -P -x -c [ PID ]的例子,即用 PS 软件来形象地处理进程的身份标识,如图 4-2 所示。


    Screenshot_2024-05-10_14-29-37.png

    3 . proc 下的 CPU 信息
    cat /proc/ [ pid ] /stat ,如图 4-3 所示。


    Screenshot_2024-05-10_14-29-53.png Screenshot_2024-05-10_14-30-13.png

    下面只重点介绍图 4-3 中几个关键数值的含义:

    pid 进程号
    tcomm 执行程序
    state 进程状态
    ppid 父进程号
    pgrp pgrp of the process
    sid session id
    tty_nr tty the process uses
    tty_pgrp pgrp of the tty
    flags task flagsmin_flt number of minor faults
    cmin_flt number of minor faults with child's
    maj_flt number of major faults
    cmaj_flt number of major faults with child's
    utime 用户态 CPU 消耗( user mode jiffi es )
    stime 内核态 CPU 消耗( kernel mode jiffi es )
    cutime 子进程用户态 CPU 消耗( user mode jiffi es with child's )
    cstime 子进程内核态 CPU 消耗( kernel mode jiffi es with child's )

    4 . dumpsys cpuinfo
    通过执行 adb shell dumpsys cpuinfo 可以获取比起 TOP 更加简活精练的信息

    5 . Systrace 、 Traceview 与 Trepn
    这些工具都跟 CPU 相关。 Systrace 和 Trace View 作为定位工具,而 Trepn 会作为耗电的分析工具
    Traceview已被弃用。如果您使用的是Android Studio 3.2或更高版本,您应该使用CPU Profiler来检查通过Debug类对您的应用程序进行插桩所捕获的.trace文件,记录新的方法跟踪,保存.trace文件,并检查应用程序进程的实时CPU使用情况。
    https://developer.android.com/studio/profile/traceview
    https://developer.android.com/studio/profile/cpu-profiler

    android List的removeAll,找需要删除的ITEM要遍历一次,删除又遍历一次.影响性能

    相关文章

      网友评论

          本文标题:CPU性能优化

          本文链接:https://www.haomeiwen.com/subject/czqsfjtx.html