- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux下时间函数使用.doc
计算程序运行时间 (2009-03-30 12:44)
分类: c
写的全面的一篇还有一种int getitimer(int which, struct itimerval *value);int setitimer(int which, const struct itimerval *value,????????????? struct itimerval *ovalue);顺便转载一下,以备不时之需/u2/85233/showart_1856092.html还有篇不错的,学习汇编后可以看看:/a//windstorm/Article/measure-execution-time-precisely
[3],文献[4]中说的很明白,现摘录如下。
?????? 我们平时常用的测量运行时间的方法并不是那么精确的,换句话说,想精确获取程序运行时间并不是那么容易的。也许你会想,程序不就是一条条指令么,每一条指令序列都有固定执行时间,为什么不好算?真实情况下,我们的计算机并不是只运行一个程序的,进程的切换,各种中断,共享的多用户,网络流量,高速缓存的访问,转移预测等,都会对计时产生影响。
?????? 文献[4]中还提到:对于进程调度来讲,花费的时间分为两部分,第一是计时器中断处理的时间,也就是当且仅当这个时间间隔的时候,操作系统会选择,是继续当前进程的执行还是切换到另外一个进程中去。第二是进程切换时间,当系统要从进程A切换到进程B时,它必须先进入内核模式将进程A的状态保存,然后恢复进程B的状态。因此,这个切换过程是有内核活动来消耗时间的。具体到进程的执行时间,这个时间也包括内核模式和用户模式两部分,模式之间的切换也是需要消耗时间,不过都算在进程执行时间中了。
?????? 那么有哪些方法能统计程序的运行时间呢?通过查找一些资料并结合自己的实践体会,摘录和总结了下面几种方法。
一、Linux的time命令
?????? Linux系统下统计程序运行实践最简单直接的方法就是使用time命令,文献[1, 2]中详细介绍了time命令的用法。此命令的用途在于测量特定指令执行时所需消耗的时间及系统资源等资讯,在统计的时间结果中包含以下数据:
?????? (1) 实际时间(real time):从命令行执行到运行终止的消逝时间;
?????? (2) 用户CPU时间(user CPU time):命令执行完成花费的系统CPU时间,即命令在用户态中执行时间的总和;
?????? (3) 系统CPU时间(system CPU time):命令执行完成花费的系统CPU时间,即命令在核心态中执行时间的总和。
?????? 其中,用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其他任务。另一个需要注意的问题是即使每次执行相同的命令,所花费的时间也不一定相同,因为其花费的时间与系统运行相关。
二、间隔计数[4]
?????? 上面介绍的time命令能测量特定进程执行时所消耗的时间,它是怎么做到的呢?
?????? 操作系统用计时器来记录每个进程使用的累计时间,原理很简单,计时器中断发生时,操作系统会在当前进程列表中寻找哪个进程是活动的,一旦发现进程A正在运行立马就给进程A的计数值增加计时器的时间间隔(这也是引起较大误差的原因)。当然不是统一增加的,还要确定这个进程是在用户空间活动还是在内核空间活动,如果是用户模式,就增加用户时间,如果是内核模式,就增加系统时间。这种方法的原理虽然简单但不精确。如果一个进程的运行时间很短,短到和系统的计时器间隔一个数量级,用这种方法测出来的结果必然是不够精确的,头尾都有误差。不过,如果程序的时间足够长,这种误差有时能够相互弥补,一些被高估一些被低估,平均下来刚好。从理论上很难分析这个误差的值,所以一般只有程序达到秒的数量级时用这种方法测试程序时间才有意义。
?????? 这种方法最大的优点是它的准确性不是非常依赖于系统负载。
?????? 实现方法之一就是上面介绍的time命令,之二是使用tms结构体和times函数。
?????? 在Linux中,提供了一个times函数,原型是
?????? clock_t times( struct tms * buf );
这个tms的结构体为
struct tms
{
?????? clock_t tms_utime;???????????? //user time
?????? clock_t tms_stime;???????????? //system time
?????? clock_t tms_cutime;??? //u
您可能关注的文档
- 16春季福师《德育论》在线作业二.doc
- 17、18简单复杂管路,流量测量.doc
- 1F品牌认识.doc
- 1坚持优先发展 建设教育强县.doc
- 1浅析信用证风险和防范.doc
- 2006年海珠区信息技术初中结业考质量的分析和考务工作总结.ppt
- 2006年造价工程师工程造价管理基础理论和相关法规试题及答案.doc
- 2007年广西公务员考试行测真题.doc
- 2008年5月二级理论.doc
- 2009全国高级中等学校(中区)海洋文学研习营实施计画.doc
- 大学心理学教学中实证研究能力培养的实践研究课题报告教学研究课题报告.docx
- 2025年平顶山二模试卷及答案.doc
- 教师教学画像的数字化呈现与教学反思:基于可视化分析的研究教学研究课题报告.docx
- 高中物理波粒二象性实验与量子力学启蒙课题报告教学研究课题报告.docx
- 初中数学统计图表在环保主题知识问答中的应用与快速反应能力课题报告教学研究课题报告.docx
- 大学生利用压力传感器优化体育器材缓冲性能课题报告教学研究课题报告.docx
- 初中化学溶液pH测定微型化实验与科研方法结合课题报告教学研究课题报告.docx
- 小学乒乓球发球技术中旋转产生的空气动力学研究课题报告教学研究课题报告.docx
- 高中生基于地理空间分析模拟城市热岛效应与气候变化协同课题报告教学研究课题报告.docx
- AI驱动的虚拟化学实验在高中教学中的创新应用课题报告教学研究课题报告.docx
原创力文档


文档评论(0)