class="markdown_views prism-atom-one-light">
转载原文
在软件开发和性能测试中,CPU占用率是一个很重要的指标,到底有哪些因素会导致CPU占用率上升呢?又有哪些手段可以降低CPU的占用率呢?简单地总结了一下关于CPU占用率的那些事。
1. 如何测试CPU占用率?
首先,我们要学会如何测试程序的CPU占用率,这里简单地给出最基础的方法:
Windows上可以通过Ctrl+Alt+Del组合调出“任务管理器”,然后查看指定进程的详细信息即可。
Linux/Android平台,可以在命令行输入:top 命令,找到指定进程即可。
注意,测试的时候,一般要分多组情况来测试,比如:空闲时、中等负荷运行时、高负荷运行时……
2. 有哪些因素导致CPU占用率上升?
(1) 复杂计算
运行一些算法处理,比如:音视频编解码、图像处理、科学计算等等,特别是一些浮点数的运算。
(2) 持续占用CPU
某些高优先级的进程/线程持续占用CPU,很少或者从来不sleep,类似 while(1) {}
(3) 数据拷贝
频繁进行大量的数据拷贝。
(4) 频繁的系统调用
比如:频繁调用 printf 打印、读写硬盘、网络收发等等。
3. 有哪些手段可以降低CPU占用率?
(1) 硬件加速
常见的硬件加速有:多核计算、GPU、DMA、音视频的硬件编解码等,很多硬件加速功能需要平台提供API或者驱动支持,在需要优化CPU占用率的时候可以重点关注一下。
(2) 学会“让出”CPU
在程序中,有多种方法可以“让出”CPU,第一种是 sleep,第二种是 await/signal 机制,任何编程语言都会有类似的接口。
另外,还有一种策略:适当降低你的进程/线程的优先级。
(3) 避免频繁的数据拷贝
在多线程编程中,数据拷贝是难免的,但是完全可以通过一些技巧减少一些不必要的拷贝,心中要有这理念,编程时多留点心。
(4) 合并一些系统调用
很多时候,多次打印可以尽量合并到一起再打印、多次硬盘/网络访问请求也可以合并到一起再发送。
4. 小结
关于CPU占用率的那些事就介绍到这儿了,很多地方只是点到而止,并没有完全展开,大家可以搜索相关的文章和资料做深度地优化和分析,有任何疑问或者建议欢迎留言或者来信