CPU不会自行计算使用率。它可能具有使该任务更轻松的硬件功能,但这主要是 *** 作系统的工作。因此,显然实现的细节将有所不同(尤其是在多核系统的情况下)。
总体思路是查看CPU需要执行的工作队列有多长时间。 *** 作系统可能会定期查看调度程序,以确定其必须执行的 *** 作数量。
这是Linux中的一个功能(从Wikipedia摘录),用于执行上述计算:
#define FSHIFT 11 #define FIXED_1 (1<<FSHIFT) #define LOAD_FREQ (5*HZ) #define EXP_1 1884 #define EXP_5 2014 #define EXP_15 2037 #define CALC_LOAD(load,exp,n) load *= exp; load += n*(FIXED_1-exp); load >>= FSHIFT;unsigned long avenrun[3];static inline void calc_load(unsigned long ticks){ unsigned long active_tasks; static int count = LOAD_FREQ; count -= ticks; if (count < 0) { count += LOAD_FREQ; active_tasks = count_active_tasks(); CALC_LOAD(avenrun[0], EXP_1, active_tasks); CALC_LOAD(avenrun[1], EXP_5, active_tasks); CALC_LOAD(avenrun[2], EXP_15, active_tasks); }}
至于问题的第二部分,大多数现代 *** 作系统都是多任务的。这意味着OS不会让程序占用所有处理时间,而不会自己占用任何处理时间(除非您让它这样做)。换句话说,即使应用程序似乎挂起, *** 作系统
仍然 可以占用一些时间来完成自己的工作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)