在Windows上,GetProcessTimes()和QueryProcessCycleTime()可以用于获取应用程序的所有线程的总数。我期望(显然很天真)在总周期数和总处理器时间(用户+内核)之间找到一个成比例的关系。当转换为相同的单位(秒)并以应用程序运行时间的百分比表示时,它们甚至不接近;它们之间的比率差别很大。
在一个应用程序启动后,它们就已经相当接近了。
3.6353% CPU cycles
5.2000% CPU time
0.79 Ratio但是,随着应用程序的闲置(在11个小时之后,大部分时间处于空闲状态),这一比率会增加。
0.0474% CPU cycles
0.0039% CPU time
12.16 Ratio显然,计算周期对用户或内核时间没有贡献。我很好奇它是怎么工作的。请指点我。
谢谢。
发布于 2016-09-17 18:50:15
GetProcessTimes和QueryProcessCycleTime值是以不同的方式计算的。GetProcesTimes/GetThreadTimes是响应计时器中断而更新的,而QueryProcessCycleTime值则基于对实际线程执行时间的跟踪。当使用和比较这两种API结果时,这些不同的测量方法可能会导致非常不同的计时结果。特别是由于GetThreadTimes只为其线程计数器包含完全完成的时隙值(请参阅http://blog.kalmbachnet.de/?postid=28),这通常会导致不正确的时间安排。
由于GetProcessTimes通常报告的时间少于实际花费的时间(因为不总是完成它的时间切片),因此与周期测量百分比相比,它的CPU时间百分比会随着时间的推移而减少。
https://stackoverflow.com/questions/39549164
复制相似问题