控制CUP占用率曲线
在《编程之美》上看过一道面试题就是要求:输出cup占用率的曲线图
今天看到了一篇文章就试试看看:
#include <iostream>
#include <cmath>
#include <ctime>
#include <windows.h> using namespace std; //得到循环0xFFFFFFFF次用的秒数
unsigned int test()
{
unsigned int c = 0xFFFFFFFF; time_t t1, t2;
time(&t1); for (unsigned int i = ; i < c; i++)
;
time(&t2);
return (unsigned int)(t2 - t1); } #define T 20000 //周期时间 20秒
#define C 100 //采样点时间间隔
#define PI 3.1415 //PI const unsigned int _count = 0xFFFFFFFF / (test() * ); //采样间隔可以执行的循环数目 //考虑到了当前系统的运行程序
const unsigned int N = T / C; //周期内采样点数目
unsigned int v[N] = { }; //所有采样点连续执行循环数
unsigned int mt[N] = { }; //所有采样点休眠毫秒数 int main()
{
//指定运行CPU
SetThreadAffinityMask(GetCurrentThread(), ); for (int i = ; i < N; i++)
{
double x = * PI * i / N;
double r = (sin(x) + ) / ; mt[i] = C - r * C; //空闲时间
v[i] = r * C * _count; //忙的时间,考虑当前cup使用情况
}
for (;;)
{
for (int i = ; i < N; i++)
{
for (int j = ; j < v[i]; j++)
;
Sleep(mt[i]);
}
}
}
实验结果:指定运行cup和核数有关吧
首先什么是CPU占用率?
在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。
因此可以写个程序,在一个刷新周期中,一会儿忙,一会儿闲,调节忙/闲比例,就可以控制CPU占有率!
题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:
1. CPU的占用率固定在50%,为一条直线;
2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);
3. CPU的占用率状态是一个正弦曲线。
直线cpu:使x=0即可:
#include <iostream>
#include <cmath>
#include <ctime>
#include <windows.h> using namespace std; //得到循环0xFFFFFFFF次用的秒数
unsigned int test()
{
unsigned int c = 0xFFFFFFFF; time_t t1, t2;
time(&t1); for (unsigned int i = ; i < c; i++)
;
time(&t2);
return (unsigned int)(t2 - t1); } #define T 20000 //周期时间 20秒
#define C 100 //采样点时间间隔
#define PI 3.1415 //PI const unsigned int _count = 0xFFFFFFFF / (test() * ); //采样间隔可以执行的循环数目
const unsigned int N = T / C; //周期内采样点数目
unsigned int v[N] = { }; //所有采样点连续执行循环数
unsigned int mt[N] = { }; //所有采样点休眠毫秒数 int main()
{
//指定运行CPU
SetThreadAffinityMask(GetCurrentThread(), ); ////正弦cpu
//for (int i = 0; i < N; i++)
//{
// double x = 2 * PI * i / N;
// double r = (sin(x) + 1) / 2; // mt[i] = C - r * C;
// v[i] = r * C * _count;
//}
//for (;;)
//{
// for (int i = 0; i < N; i++)
// {
// for (int j = 0; j < v[i]; j++)
// ;
// Sleep(mt[i]);
// }
//} //直线cpu
for (int i = ; i < N; i++)
{
double x = * PI * i / N;
x = ;
double r = (sin(x) + ) / ; mt[i] = C - r * C;
v[i] = r * C * _count;
}
for (;;)
{
for (int i = ; i < N; i++)
{
for (int j = ; j < v[i]; j++)
;
Sleep(mt[i]);
}
}
} //没有考虑现在系统cpu使用情况
//#include <windows.h>
//#include <math.h>
//int main(void)
//{
// SetThreadAffinityMask(GetCurrentProcess(), 1);
// const double SPLIT = 0.01;
// const int COUNT = 200;
// const double PI = 3.14159265;
// const int INTERVAL = 300;
// DWORD busySpan[COUNT]; //array of busy time
// DWORD idleSpan[COUNT]; //array of idle time
// int half = INTERVAL / 2;
// double radian = 0.0;
// for (int i = 0; i < COUNT; i++)
// {
// busySpan[i] = (DWORD)(half + (sin(PI*radian)*half));
// idleSpan[i] = INTERVAL - busySpan[i];
// radian += SPLIT;
// }
// DWORD startTime = 0;
// int j = 0;
// while (true)
// {
// j = j%COUNT;
// startTime = GetTickCount();
// while ((GetTickCount() - startTime) <= busySpan[j])
// ;
// Sleep(idleSpan[j]);
// j++;
// }
// return 0;
//}
结果:
reference:
控制CUP占用率曲线的更多相关文章
- 控制CPU占用率曲线
编程之美的第一个问题,我的机器是双核的,用文中的代码,得到的曲线波动比较大额,受其他进程的影响比较大.文中提到10ms接近windows的调度时间片,如果选得太小,会造成线程被频繁唤醒和挂起,造成内核 ...
- 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥
http://blog.csdn.net/pipisorry/article/details/36189155 <strong><span style="font-size ...
- 编程之美_1.1 让CPU占用率曲线听你指挥
听到有人说让要写一个程序,让用户来决定Windows任务管理器的CPU占用率. 觉得很好奇.但第一个想法就是写个死循环.哈哈.不知道具体的占用率是多少,但至少能保证在程序运行时,CPU的占用率终会稳定 ...
- 让cpu占用率曲线听你指挥(多核处理器)
编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html [目录] 不考 ...
- 第1章 游戏之乐——让CPU占用率曲线听你指挥
让CPU占用率曲线听你指挥 写一个程序,让用于来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: CPU的占用率固定 ...
- JVM CUP占用率过高排除方法,windows环境
jdk自带的jvisualvm可以看到程序CPU使用率,但是无法确定具体的线程,想要确定到具体的线程需要借用到微软的Process Explorer 具体排除方法: 一:打开资源管理器,找到cup占用 ...
- 1.1 让CPU占用率曲线听你指挥[cpu manager]
[本文链接] http://www.cnblogs.com/hellogiser/p/cpu-manager.html [题目] 写一个程序,让用户来决定Windows任务管理器(Task Manag ...
- 编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器)
[目录] 不考虑其他进程,cpu画正弦曲线 获取总体cpu利用率 获取多核处理器单个cpu利用率 考虑其他进程,cpu画正弦曲线 下面的程序针对多核处理器,可以设置让任何一个cpu显示相应的曲线(本文 ...
- 让CPU占用率曲线听你指挥
使用GetTickCount()和Sleep(): Code#include <stdio.h> #include <unistd.h> #include <time.h ...
随机推荐
- jdk生成证书,网站请求变成https
生成证书的步骤 1.进入jdk的bin目录 keytool -genkey -alias tomcat -keyalg RSA 命名证书的名字叫tomcat 2.将证书拷贝至tomcat的bin目 ...
- webdriver高级应用- 操作日期控件
1. 通过点击的方式操作日期控件 #encoding=utf-8 from selenium import webdriver import unittest, time, traceback fro ...
- Leetcode 457.环形数组循环
环形数组循环 给定一组含有正整数和负整数的数组.如果某个索引中的 n 是正数的,则向前移动 n 个索引.相反,如果是负数(-n),则向后移动 n 个索引. 假设数组首尾相接.判断数组中是否有环.环中至 ...
- [笔记]BFS算法的python实现
#!/usr/bin/env python # -*- coding:utf-8 -*- graph = {} graph["you"] = ["alice", ...
- 连通图 poj2186 最受欢迎的牛(求最受欢迎的牛的数量)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27531 Accepted: 11077 De ...
- 【Luogu】P2657windy数(数位DP)
题目链接 正式迈入了数位DP的大门…… 心情激动 (看我立个flag,我如果专攻数位DP的话,到wc之前就会有秒数位DP蓝题的能力) 数位DP讲解链接 讲的非常详细,良心博客.比我写的博客加在一起还要 ...
- P2622 关灯问题II (状态压缩,最短路)
题目链接 Solution 这道题算是很经典的状压问题了,好题. 考虑到 \(n\) 的范围仅为 \(10\) , 那么也就是说所有状态压起来也只有 \(1024\) 种情况. 然后我们发现 \(m\ ...
- [POJ2417]Discrete Logging(指数级同余方程)
Discrete Logging Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an intege ...
- [暑假集训--数位dp]hdu3555 Bomb
The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the ti ...
- Pushlets的初始化陷阱
Pushlets是在类名为Pushlet的servlet的init方法中进行初始化的.一般我们会在web.xml配置pushlet的时候,指定其servlet在Web应用启动时就进行初始化,即便这样, ...