Linux下clock计时函数学习
作者:网络转载 发布时间:[ 2016/2/18 16:32:38 ] 推荐标签:操作系统
3. 事实果真如此么?关于”三多“话题
多核多进程多线程技术的发展使得运算效率不断提高的同时,也给码农们带来新的烦恼。
3.1 多核计算
上面已经知道了clock函数的实现是基于时钟计时单元的。问题出在了cpu的时钟计时单元上。当采用多核cpu时,进程或线程调
用clock,记录了当前核时钟。但在下次调用clock之前很可能发生cpu调度,进程或线程被调度到其他cpu上运行。这导致两次取得
计时单元并不是同一个cpu的,产生计时错误。但究竟这个误差有多大,有待实验论证。
3.2 多进程计算
上面通过time函数进行了验证,clock函数计算的时间貌似是等于用户CPU时间+系统CPU时间。果真如此么?我们再次对测试代码
进行修改,将循环次数减少至一千次,并在空循环里加一句
system("cd");
这一句用于模拟子进程的运行,这里图方便选择系统进程作为子进程。
运行shell命令
time ./test
显示结果
Time to do 1000 empty loops is 0.010000 seconds
real 0m3.492s
user 0m0.512s
sys 0m2.972s
这个实验说明了,clock函数并没有考虑CPU被子进程消耗的时间。
3.3 多线程计算
上面提到了三个时间Real time, User time和Sys time。real time > user time + sys time 这种关系始终成立么?
答案是否定的。原因在于并行计算。现在再次回忆一下这三种时间的概念:
Real指的是实际经过的时间,User和Sys指的是该进程使用的CPU时间。
1. Real是墙上时间(wall clock time),也是进程从开始到结束所用的实际时间。这个时间包括其他进程使用的时间片和进程阻塞的时间(比如等待I/O完成)。
2. User指进程执行用户态代码(核心之外)所使用的时间。这是执行此进程所消耗的实际CPU时间,其他进程和此进程阻塞的时间并不包括在内。
3. Sys指进程在内核态消耗的CPU时间,即在内核执行系统调用所使用的CPU时间。
那么,什么情况下进程开始到结束所经过的时间会比进程所消耗的用户时间和系统时间(user time + sys time)小呢?
User+Sys为进程所使用的实际CPU时间。在多处理器的系统上,一个进程如果有多个线程或者有多个子进程并行执行,可能导致Real time比CPU time(User + Sys time)要小,这是很容易理解的。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Linux下开源的DDR压力测试工具曝Linux恶意软件:让树莓派设备挖掘数字货币linux系统中不同颜色的文件夹及根目录介绍软件测试工程师必知必会Linux命令Linux下DNS服务器配置如何成为不可替代的Linux运维工程师?详解Linux进程(作业)的查看和杀死Linux 日志定时轮询流程详解比特币勒索病毒不只Windows系统有,Linux版的来了Linux日志定时轮询流程详解Linux iommu和vfio概念空间解构Linux系统如何低于TCP洪水攻击Linux无损调整分区大小Linux下防火墙配置实例Linux使用Jexus托管Asp.Net Core应用程序Linux中引号的那些事

sales@spasvo.com