如何让cpu使用率0一直衷0%左右

本帖子已过去太久远了,不再提供回复功能。怎样让cpu的使用率为一条直线 - ITeye问答
最近在一本叫编程之美的书上看到这样一个问题,怎样使你的cpu的使用成为一条直线。书上的代码是这样的
需要cpu的时钟频率 且计算机执行代码是平均每个时钟频率执行两行代码
结果 如果是一个主频为 2.4Ghz的cpu
那么 循环次数是 2.4* *2/5 = 96 000 000
对于计算机的休眠,如果sleep(1000)(即休眠1秒)效果不是很明显,减少一个数量级,即sleep(10),
int main(){
for(int i=0;i&960000;i++){
sleep(10);
}
上面的代码是简写式的,可能有语法错误,希望高手给说说如何用java语言控制cpu的使用率为一条直线
如果是双cpu呢 怎么控制用一个cpu来执行程序,还有我试过了,没有达到书上说的要求。
刚才在网上搜了下,找到答案了,共同学习下
public class CPUTest {
public static void main(String[] args) {
int busyTime = 10;
int idleTime = busyT
long startTime = 0;
while (true) {
startTime = System.currentTimeMillis();
// busy loop
while ((System.currentTimeMillis() - startTime) &= busyTime)
Thread.sleep(idleTime);
catch (InterruptedException e) {
System.out.println(e);
错了&& 把& 注意双cpu& 改成 双核
synchronized 这个修饰符&& 注意双cpu&& 也只能在同一时刻运行一条线程
已解决问题
未解决问题【求助】cpu占用率一直20%左右_windows8吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:394,081贴子:
【求助】cpu占用率一直20%左右收藏
如题,cpu一直在20%左右,开360就是360占用,不开就是其他占用
宜家上海网上商城上线了!超过7000个单品,家装更惬意!
发脾气,只是表示您的智慧不足以解决你所面临的问题
我在用单机版贴吧么?求大神
系统虚拟内存站着,
我的也是有时候百分之99
有一对孪生兄弟,同时进入高考考场。结果,哥哥收到了大学录取通知书,弟弟则以两分之差名落孙山。兄弟俩长相酷似,性格各异。哥哥忠诚敦厚,弟弟活泼机灵;哥哥拙于言词,弟弟口若悬河。哥哥拿着大学录取通知书,面对贫病交加的父母默默无语;弟弟关在房里不吃不喝,长吁短叹“天公无眼识良才”。 愁眉不展的老爸默思了两通宵,终于眨巴着眼睛向大儿子开口了:“让给弟弟去读书吧,他天生是个读书的料。”哥哥把大学录取通知书送到弟弟手中,并在弟弟身旁说了这么一句话:“这不是走进天堂的门票,别把太多的希望放在它的上面。”弟弟不解,问:“那你说这是什么?”哥哥答:“一张吸水纸,专吸汗水的纸!”弟弟摇着头,笑哥哥尽说傻话。 开学了,弟弟背着行囊走进了大都市的高等学府。哥哥则让体弱多病的老爸从镇办水泥厂回家养病,自己顶上,站在碎石机旁,拿起了沉重的钢钎……碎石机上,有斑斑血迹。这台机子上,曾有多名工人轧断了手指。哥哥打走上这个岗位的第一天起,就在做一个美丽的梦。他花了三个月的时间,对机身进行了技术改造,既提高了碎石质量,又提高了安全系数。 厂长把他调进了烧成车间。烧成车间灰雾弥天,不少人得了矽肺病。他同几个技术骨干一起,殚精竭虑,苦心钻研,改善了车间的环保设施。厂长把他调进了科研实验室。在实验室,他博览群书,多次到各厂求经问道,反复实验,经过一次又一次的创新实验,使水泥质量大大提高,为厂里打出了新的品牌产品,水泥畅销华南几省。再之后,他便成为全市建材工业界的名人…… 弟弟进入了大学后,第一年还像读书的样子,也写过几封信问老爸的病;第二年,认识了一个大款的女儿,就双双坠入爱河,那女孩成了他取之不尽、用之不竭的钱包。整整两年他没向家中要过一分钱,却通身脱土变洋,“帅呆”、“酷毙”了。进入大四后,那女孩跟他“拜拜”了,他便整个儿陷入了“青春苦闷期”。泡吧,上网,无心读书,考试靠作弊混得了大学毕业文凭。 他像一只苍蝇飞了一个圈子又回到家乡所在城市求职。他还有那么一点羞耻感,不愿在落魄的时候回家见父母。经市人才中心介绍,他到一家响当当的建材制品公司应聘。好不容易闯过了三关,最后是在公司老总的办公室里答辩。轮到他答辩时,老总迟迟不露面。最后秘书来了,告诉他已被录用。不过必须先到烧成车间当工人。 他感到委屈,要求一定要见老总。秘书递给他一张纸条,他展开一看,上书八个大字:“欲上天堂,先下地狱。”他一抬头,猛见哥哥走了
内置第7代英特尔处理器的平板电脑二合一,紧随时尚潮流,性能出众,低耗高能,更加快速,更加便捷!点击了解!
这有什么问题
360及其浏览器,绅士、备份占内存呢,清除这三项看看。
图片来自:
360现在我已经卸了还是这样
不是很高啊
牛逼是几个字来着,有15个了么?楼主你这么牛逼你家人知道吗?楼主你知道哦摩托罗拉的logo应该倒过来看吗?
你需要散热器
我又发现了个新问题,我的账号只占了10%不到的CPU,剩下的都不知道什么占的
问题已解决,谢谢大家
是系统更新补丁的吧
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或【求助】怎么控制进程的CPU使用率 - 看雪安全论坛
该主题: "【求助】怎么控制进程的CPU使用率" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
注册日期: May 2008
现金: 182 Kx
致谢数: 19
获感谢文章数:0获会员感谢数:0
, 13:29:58
【求助】怎么控制进程的CPU使用率
请问怎么控制进程的CPU使用率?
有个思路是这样的,可是我试了很久,还是有问题
CreateJobObject创建作业对象&
AssignProcessToJobObject&将其绑定到作业中&
SetInformationJobObject设置作业信息&
JOBOBJECTINFOCLASS传入JOB_OBJECT_MSG_END_OF_JOB_TIME&
作业分配的CPU时间到期时,就投递通知。但其中的进程不会自动终止。我们可以允许进程继续运行,可以设置一个新的时间限额,还可以自己调用TerminateJobObject
注册日期: Nov 2010
现金: 103 Kx
获感谢文章数:2获会员感谢数:2
, 16:43:59
占个沙发同求...
注册日期: May 2008
现金: 238 Kx
获感谢文章数:2获会员感谢数:2
, 17:22:08
占位,学习
注册日期: Dec 2011
现金: 103 Kx
获感谢文章数:1获会员感谢数:1
, 00:42:59
CPU占用率这个似乎很难直接控制。
1.降低优先级,减小资源耗费。
2.指定其可以使用的CPU,比如指定只允许使用CPU7,这样在四核8线程的i7上总占用率不会超过12.5%
注册日期: Jul 2011
现金: 204 Kx
获感谢文章数:3获会员感谢数:3
, 07:15:01
最初由 phpskycn发布
CPU占用率这个似乎很难直接控制。
1.降低优先级,减小资源耗费。
2.指定其可以使用的CPU,比如指定只允许使用CPU7,这样在四核8线程的i7上总占用率不会超过12.5%
直接控制的结果就是对方的CPU下去了&你上去了
建议控制优先级,目前大多数资源控制软件都这么干的
注册日期: May 2008
现金: 182 Kx
致谢数: 19
获感谢文章数:0获会员感谢数:0
, 12:55:25
奥,谢谢大家的回答,我大概的总结一下
1.通过设置处理器关系,让你指定的进程只在一个核心(或者线程)上运行---&SetProcessAffinityMask来实现。
2.设置进程的优先级,把它调到最低----&SetPriorityClass
3.通过DeadLoop中配合Sleep、ResumeThread和SuspendThread,对进程的执行时间进行限制
4.CreateJobObject创建作业对象&
AssignProcessToJobObject&将其绑定到作业中&
SetInformationJobObject设置作业信息&
JOBOBJECTINFOCLASS传入JOB_OBJECT_MSG_END_OF_JOB_TIME&
作业分配的CPU时间到期时,就投递通知。但其中的进程不会自动终止。我们可以允许进程继续运行,可以设置一个新的时间限额,还可以自己调用TerminateJobObject
注册日期: May 2008
现金: 182 Kx
致谢数: 19
获感谢文章数:0获会员感谢数:0
, 13:02:48
谁在帮我把第四种方案实现一下啊,我的一直抱SetInformationJobObject2&Fail!,err&code&为24,代码相当不完整,帮我搞搞,最好能实现对UserTime的Limit
#include&&stdafx.h&
#include&&windows.h&
#include&&stdlib.h&
#include&&process.h&
HANDLE&g_hIOCP;
HANDLE&g_hThreadIOCP;
HANDLE&hP&
&&HANDLE&hJ
/////////////////////////////&chBEGINTHREADEX&Macro&///////////////////////////
//&This&macro&function&calls&the&C&runtime's&_beginthreadex&function.&
//&The&C&runtime&library&doesn't&want&to&have&any&reliance&on&Windows'&data&
//&types&such&as&HANDLE.&This&means&that&a&Windows&programmer&needs&to&cast
//&values&when&using&_beginthreadex.&Since&this&is&terribly&inconvenient,&
//&I&created&this&macro&to&perform&the&casting.
typedef&unsigned&(__stdcall&*PTHREAD_START)&(void&*);
#define&chBEGINTHREADEX(psa,&cbStackSize,&pfnStartAddr,&\
&&&pvParam,&dwCreateFlags,&pdwThreadId)&&&&&&&&&&&&&&&&&\
&&&&&&((HANDLE)_beginthreadex(&&&&&&&&&&&&&&&&&&&&&&&&&&\
&&&&&&&&&(void&*)&&&&&&&&(psa),&&&&&&&&&&&&&&&&&&&&&&&&&\
&&&&&&&&&(unsigned)&&&&&&(cbStackSize),&&&&&&&&&&&&&&&&&\
&&&&&&&&&(PTHREAD_START)&(pfnStartAddr),&&&&&&&&&&&&&&&&\
&&&&&&&&&(void&*)&&&&&&&&(pvParam),&&&&&&&&&&&&&&&&&&&&&\
&&&&&&&&&(unsigned)&&&&&&(dwCreateFlags),&&&&&&&&&&&&&&&\
&&&&&&&&&(unsigned&*)&&&&(pdwThreadId)))
DWORD&WINAPI&JobNotify(PVOID)&{
while(true)
DWORD&lpNumberOfB
ULONG_PTR&lpCompletionK
LPOVERLAPPED&lpO
GetQueuedCompletionStatus(g_hIOCP,&lpNumberOfBytes,&lpCompletionKey,&lpOverlapped,INFINITE);
printf(&i&am&running!\n&);
switch(lpNumberOfBytes)
case&JOB_OBJECT_MSG_END_OF_PROCESS_TIME:
&&&&MessageBox(0,&Time&Up&,&JJ&,0);
&&&&&TerminateJobObject(hJob,0);
//return&0;
int&main(int&argc,&char*&argv[])
//LARGE_INTEGER&a;
&&&&int&Pid=0;
const&int&nNanosecondsPerSecond&=&;
&&&const&int&nMillisecondsPerSecond&=&1000;
&&&const&int&nNanosecondsPerMillisecond&=&
&&&&&&nNanosecondsPerSecond&/&nMillisecondsPerS
&&&&JOBOBJECT_END_OF_JOB_TIME_INFORMATION&Jeojti={0};
&&JOBOBJECT_ASSOCIATE_COMPLETION_PORT&Jacp={0};
&&JOBOBJECT_BASIC_LIMIT_INFORMATION&Jbli={0};
&&&&Jeojti.EndOfJobTimeAction=JOB_OBJECT_POST_AT_END_OF_JOB;
&&Jbli.LimitFlags|=JOB_OBJECT_LIMIT_PROCESS_TIME;
&&&&Jbli.PerProcessUserTimeLimit.QuadPart=10000;
&&if(argc!=2)
&&&&&&&printf(&You&Have&to&Input&one&Argument!\n&);
&&&&&printf(&Usage:xxx.exe&PID\n&);
&&&&&return&0;
&&Pid=atoi(argv[1]);&&//将传入的参数转换成整形
//&Create&the&completion&port&that&receives&job&notifications
&&&g_hIOCP&=&CreateIoCompletionPort(INVALID_HANDLE_VALUE,&NULL,&0,&0);
&&&//pletionKey=(PVOID)COMP_KEY;
&&&pletionPort=g_hIOCP;
&&&//&Create&a&thread&that&waits&on&the&completion&port
&hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
&if(!hProcess)
&&&printf(&OpenProcess&Fail!\n&);
&&&return&0;
&if(!(hJob=CreateJobObject(NULL,&MySpecialJob&)))&&//在使用这个函数的时候,一定要在Stdafx.h中添加#define&_WIN32_WINNT&0x0500,否则编译报错,未定义的字符
&&&&printf(&CreateJobObject&Fail!\n&);
&&&&return&0;
if(!AssignProcessToJobObject(hJob,hProcess))//进程和JOB相关联
&&&&printf(&AssignProcessToJobObject&Fail!\n&);
&&&&return&0;
if(!SetInformationJobObject(hJob,JobObjectEndOfJobTimeInformation,&Jeojti,sizeof(Jeojti)))
&&&&printf(&SetInformationJobObject0&Fail!\n&);
&&&&CloseHandle(hJob);
&&&&CloseHandle(hProcess);
&&&&return&0;
if(!SetInformationJobObject(hJob,JobObjectAssociateCompletionPortInformation,&Jacp,sizeof(Jacp)))
&&&&printf(&SetInformationJobObject1&Fail!\n&);
&&CloseHandle(hJob);
&&&&CloseHandle(hProcess);
&&&&return&0;
if(!SetInformationJobObject(hJob,JobObjectBasicLimitInformation,&Jbli,sizeof(Jbli)))
&&&&printf(&SetInformationJobObject2&Fail!\n&);
&&printf(&Err&code&is&%d\n&,GetLastError());
&&CloseHandle(hJob);
&&&&CloseHandle(hProcess);
&&&&return&0;
g_hThreadIOCP&=&chBEGINTHREADEX(NULL,&0,&JobNotify,&NULL,&0,&NULL);
WaitForSingleObject(g_hThreadIOCP,&INFINITE);
CloseHandle(hJob);
CloseHandle(hProcess);
&&return&0;
注册日期: Dec 2012
现金: 148 Kx
获感谢文章数:0获会员感谢数:0
, 13:56:31
&真正的程序员才考虑这些,我这样的三流从来没想过!
该主题: "【求助】怎么控制进程的CPU使用率" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
您不可以发表主题
您不可以回复帖子
您不可以上传附件
您不可以编辑自己的帖子
论坛论坛启用
用户控制面板
会员在线状态
CrackMe攻击篇,分析文章提交区
『看雪众测/众包』
『求助问答』
『经典问答』
『资料导航』
『软件调试逆向』
『密码学』
『编程技术』
『C32Asm』
『MDebug』
『安全工具开发』
『加壳与脱壳』
『CrackMe&ReverseMe』
『资源下载』
『Android 安全』
『Android 开发』
『iOS安全』
『WEB安全』
『漏洞分析』
『外文翻译』
『招聘专区』
『职业生涯』
『15PB培训』
『麦洛克菲培训』
『茶余饭后』
『安全资讯』
『论坛活动』
6)PEDIY Crackme竞赛2009
7)看雪十周年专版
8)腾讯公司2010软件安全竞赛
9)2011 Exploit Me竞赛
『图书项目版』
《加密与解密(第三版)》
《C++反汇编与逆向分析技术揭秘》
《Android软件安全与逆向分析》
『论坛版务』
所有时间均为北京时间, 现在的时间是 .
&&& 看雪学院()
| 提供带宽资源
|&微信公众帐号:博客访问: 863292
博文数量: 430
博客积分: 9980
博客等级: 中将
技术积分: 4525
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java
偶尔从一本杂志上看到的一个问题,挺有意思。
这个问题貌似挺玄,实际上很简单。在某一时刻,CPU只有两种状态,busy or idle。所谓的保持CPU使用率在50%左右只是说,如果恰恰在一个CPU使用率的统计周期内,CPU一半时间busy,一半idle,则在windows任务管理器中显示的CPU使用记录就是50%了。下面这段代码就能实现该功能:
&public static void firstMethod() throws InterruptedException {&&for (;;) {&&&for (int i = 0; i <= 9600000; i++)&&&&;&&&Thread.sleep(10);&&}&}
当然,根据CPU的运算能力不同,9600000这个值需要调整。这也正是上面代码的缺点,下面这个方法能保证CPU一半时间busy一半时间idle:
&public static void secondMethod() throws InterruptedException {&&int busyTime = 10;&&int idleTime = 2 * busyT&&long startTime = 0;&&while (true) {&&&startTime = System.currentTimeMillis();&&&while (System.currentTimeMillis() - startTime <= busyTime)&&&&;&&&Thread.sleep(idleTime);&&}&}
但是第二个方法也有问题,就是如果CPU已经有一定的使用率,比如正在运行其它程序,就会不准确。那么要动态的,准确的决定CPU的idle和busy时间,就要先取得当前CPU的使用率,这个又因不同的操作系统而异,比如Linux下,也许可以这样得到:& Runtime rt = Runtime.getRuntime();& Process p = rt.exec("top -b -n 1");& 然后再操作p的inputStream就可以得到想要的值。如果是在windows上,恐怕就要借助于JNI(Java Native Interface)了。
下面这个方法能让CPU使用率的曲线呈现正弦曲线,原理就是让CPU busy和idle的时间按照正弦曲线的坐标值此消彼长:&public static void thirdMethod() throws InterruptedException {&&final double SPLIT = 0.01;&&final int COUNT = 200;&&final double PI = 3.;&&final int INTERVAL = 300;&&int[] busySpan = new int[COUNT];&&int[] idleSpan = new int[COUNT];&&int half = INTERVAL / 2;&&double radian = 0.0;&&for (int i = 0; i < COUNT; i++) {&&&busySpan[i] = (half + (int)(Math.sin(PI * radian) * half));&&&idleSpan[i] = INTERVAL - busySpan[i];&&&radian += SPLIT;&&}
&&long startTime = 0;&&int j = 0;&&while (true) {&&&j = j % COUNT;&&&startTime = System.currentTimeMillis();&&&while ((System.currentTimeMillis() - startTime) <= busySpan[j])&&&&;&&&Thread.sleep(idleSpan[j]);&&&j++;&&}&}
阅读(7127) | 评论(1) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 cpu使用率0 的文章

 

随机推荐