编程之美_1.1 让CPU占用率曲线听你指挥

听到有人说让要写一个程序,让用户来决定Windows任务管理器的CPU占用率。

觉得很好奇。但第一个想法就是写个死循环。哈哈。不知道具体的占用率是多少,但至少能保证在程序运行时,CPU的占用率终会稳定在一个值上(可能是100呢)。

 

在《编程之美》上看到了这个,就顺手记下来吧。

 

原题是这样的:

写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:

1.CPU的占用率固定在50&,为一条直线;

2.CPU的占用率为一条直线,具体占用率由命令行参数决定(参数范围1~100);

3.CPU的占用率状态是一条正弦曲线。

 

简析:

CPU占用率:在任务管理器的一个刷新周期内,CPU执行应用程序的时间和刷新周期总时间的比率

任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。

任务管理器报告CPU的使用率为0的时候,System Idle Process占用了CPU空闲的时间。

程序在等待用户的输入,或者在等待特定事件的发生(WaitForSingleObject())时,系统中的进程可能会空闲下来。

 

小结:

在任务管理器的刷新期间内,使得CPU一会忙,一会闲,调节忙/闲的比例,就可以控制任务管理器中显示的CPU占用率。

 

解法一:

使CPU在一iduan时间内跑Busy和Idle两个不同的循环,通过不同的时间比例,调节CPU使用率。

int main()
{
    for (; ; )
    {
        for (int i = 0; i < 9600000; i++)
        {
            ;
        }
        Sleep(10);
    }
}

说明:

960000000为CPU一秒种可以运行的空循环(P4 2.4GHz 时钟周期)

若循环一一秒为周期,则波形可能为锯齿状。

10ms接近于windows的调度时间片。

调整循环参数,可以调整占用率曲线。

 

注意点:

1.尽量减少sleep/awake的频率,以减少操作系统内核调度程序的干扰;

2.尽量不要调用system call(比如I/O这些privilege instruction),因为它也会导致很多不可控的内核运行时间。

 

先记录一下。稍后补充。。。

 

参考《编程之美》

posted @   风来风往风伤(TiAmo)  阅读(640)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示