首页
社区
课程
招聘
怎么控制线程占用的cpu
发表于: 2010-5-26 19:26 6446

怎么控制线程占用的cpu

2010-5-26 19:26
6446
有个线程一直在循环执行.
在执行某些代码的时候会产生cpu峰值.

目标:
    (1)尽量不产生峰值
    (2)能控制cpu占用率.

线程优先级虽然很好用,但有时候cpu占用率也会很高(虽然系统并不卡).

各位帮忙想想办法. 回帖就有分噢,有好主意的会使劲加分.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 75
活跃值: (813)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
控制线程占用cpu的好像仅有两个变量吧,一个就是楼主提到的优先级,还有一个是时间片
PKTHREAD Thread->Quantum.改变优先级搞不定,就试试时间片,适当改小点:)
2010-5-26 20:24
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
来个比较低级的方案, sleep .....
2010-5-26 20:30
0
雪    币: 238
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果是多核的,就用CPU亲和码吧,这样至少不会超过50%
2010-5-26 20:58
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
没事睡一下,sleep(0)就可以了
2010-5-27 10:05
0
雪    币: 2513
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这个用sleep(0)一般可以解决,但是要靠经验和尝试,sleep多了线程切换会过于频繁,少了则达不到效果
2010-5-27 10:25
0
雪    币: 357
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
要不用Job来限制?
SetInformationJobObject可以控制进程使用的用户态时间、内核时间、内存、权限等等。

楼主可以研究一下,对解决你的问题有没有帮助。
2010-5-27 10:58
0
雪    币: 156
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
线程一直循环的话,应该无法降低cpu占用率吧,但是应该也不会产生峰值才对。

当系统中只有一个线程在while(1){}死循环时,CPU占用率约为50%左右,两个while(1){}死循环就直接100%了(我打字的时候实测)。

所以我觉得还是应该改进线程的执行逻辑,合理使用等待和唤醒,避免死循环才是正道……
2010-5-27 13:02
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
9
是想把线程的cpu占用比较平稳下来,尽量不会有时候高有时候低,而且不能造成卡机.
线程优先级已经用过了,4楼,2楼和7楼的方法还没试.下去试试.
结贴.
等不行了再发帖问:)
2010-5-27 20:10
0
游客
登录 | 注册 方可回帖
返回
//