POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 5477|回复: 49
打印 上一主题 下一主题

其实我到现在还是搞不清楚,如果显卡有自己的核心,那CPU跑那么高到底是在处理什么?

[复制链接]
跳转到指定楼层
#
发表于 2010-9-14 21:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
不知道440能不能完全发挥出5750的性能??会不会玩着游戏CPU100%而显卡还没满载??
49#
发表于 2010-9-16 18:00 | 只看该作者
程序员的水平的确很关键
回复 支持 反对

使用道具 举报

48#
发表于 2010-9-16 13:58 | 只看该作者
很好,同意你的观点。
我的Concern是即使第一种写法,也不会把CPU核心100%占用掉!

想想我们 ...
yyzjp 发表于 2010-9-16 10:37



    如果每个EXE都是那种写法的话,确实可能动不了。
   不过进程也是有优先级的,每个进程总要分点时间。所以这个100%占用的意思不是说永远100%地占着CPU,而是使CPU的使用率永远100%(不是别人用着,就是我用着,不存在没人用的情况)
回复 支持 反对

使用道具 举报

47#
发表于 2010-9-16 11:15 | 只看该作者
对游戏数据/状态考虑不全也是程序员水平的一个方面……
lotuis 发表于 2010-9-16 10:53



    OK ,打个比方,GTA, 黑手党占用率高,是因为他们的程序员很烂不如哭姐的?

恐怕不能这么简单定论。
回复 支持 反对

使用道具 举报

46#
发表于 2010-9-16 10:53 | 只看该作者
所以我的结论就是, 大多数情况下不是程序员的水平导致CPU占用率高,而是其他的一些我们不太清楚的东东,
...
yyzjp 发表于 2010-9-16 10:39



    对游戏数据/状态考虑不全也是程序员水平的一个方面……
回复 支持 反对

使用道具 举报

45#
发表于 2010-9-16 10:39 | 只看该作者
所以我的结论就是, 大多数情况下不是程序员的水平导致CPU占用率高,而是其他的一些我们不太清楚的东东,
他们确实需要CPU不停的运算(在玩游戏的情况下)
回复 支持 反对

使用道具 举报

44#
发表于 2010-9-16 10:38 | 只看该作者
其实跟Windows没关系。用WindowsAPI只是为了写起来简单而已(懒。。。)

第一段就是所谓“忙等 ...
zhjecho 发表于 2010-9-16 10:16


多谢,受教了,我的Concern在上面一楼
回复 支持 反对

使用道具 举报

43#
发表于 2010-9-16 10:37 | 只看该作者
不调用WaitMessage就会一直在while里循环。
WaitMessage使线程挂起,所以即使一直没有新的消息,也不会一直 ...
bird11530000 发表于 2010-9-15 23:05



    很好,同意你的观点。
我的Concern是即使第一种写法,也不会把CPU核心100%占用掉!

想想我们的操作系统有多少个exe 在运行,他们都有这个默认的While{PeekMessage()} 循环在各自Main函数里面,如果按28楼zhjecho的说法,那岂不是我们的操作系统动都不能动?
回复 支持 反对

使用道具 举报

42#
发表于 2010-9-16 10:16 | 只看该作者
多谢!

虽然我并不精通Windows 消息编程,但是如果是
单核CPU,即使第一种写法它也不会耗尽100% 的CP ...
yyzjp 发表于 2010-9-15 17:31



    其实跟Windows没关系。用WindowsAPI只是为了写起来简单而已(懒。。。)

第一段就是所谓“忙等”,即使没有需要处理的消息(数据),也要不断地执行PeekMessage
(你可以把这个换成任何别的语句),而没有任何意义,导致一个核的资源全被耗尽

第二段调用WaitMessage之后,这个线程就被挂起了,CPU可以去干别的事情,有消息(数据)来了才恢复执行
回复 支持 反对

使用道具 举报

41#
发表于 2010-9-16 08:28 | 只看该作者
回复 32# yyzjp


    这是阻塞与非阻塞通讯 其中又有很多的windows下消息机制和api的东西 实际上不具有什么代表性
回复 支持 反对

使用道具 举报

40#
发表于 2010-9-16 08:26 | 只看该作者
int k=1
if(k
xzmmpb 发表于 2010-9-15 13:09


这个当然不会永远死下去
回复 支持 反对

使用道具 举报

39#
发表于 2010-9-16 07:17 | 只看该作者
理论什么的我不清楚,实际情况就是:窗口模式运行尘埃2,同时打开任务管理器和GPU-Z来监视占用情况,CP ...
asdf007 发表于 2010-9-15 14:25



   


DIRT2的配置文件,最高支持到8核...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

38#
发表于 2010-9-16 06:41 | 只看该作者
本帖最后由 pangauto 于 2010-9-16 06:57 编辑
理论什么的我不清楚,实际情况就是:窗口模式运行尘埃2,同时打开任务管理器和GPU-Z来监视占用情况,CP ...
asdf007 发表于 2010-9-15 14:25


四个核心占用都不超过50%??你确定?
我Q9550超3.6G ,260+,1920x1080,玩dirt2游戏中监控四个核心占用率偶尔都会到70%以上,难道Q9那么菜?!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

37#
发表于 2010-9-16 01:42 | 只看该作者
ls那位写if程序的,貌似怎么也循环不起来吧,if换成while还差不多
回复 支持 反对

使用道具 举报

36#
发表于 2010-9-15 23:16 | 只看该作者
挖,技术贴啊技术贴,喜欢~!
回复 支持 反对

使用道具 举报

35#
发表于 2010-9-15 23:07 | 只看该作者
+1
回复 21# hakase
回复 支持 反对

使用道具 举报

34#
发表于 2010-9-15 23:05 | 只看该作者
不调用WaitMessage就会一直在while里循环。
WaitMessage使线程挂起,所以即使一直没有新的消息,也不会一直调用WaitMessage. 线程的TCB会被OS挂到一个等待链表上,直到有新消息后OS才会唤醒它,所以该线程不会占用CPU运算器资源。当然它的数据和代码可能还在CPU的cache里。
回复 32# yyzjp
回复 支持 反对

使用道具 举报

33#
发表于 2010-9-15 21:50 | 只看该作者
回复 16# pivk


    我自己用5000+和9800GTX 玩NBA2k10 帧数就20-35 ,换开核5000就是85-100
回复 支持 反对

使用道具 举报

乐极生悲 该用户已被删除
32#
发表于 2010-9-15 17:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

lxlfive 该用户已被删除
31#
发表于 2010-9-15 17:33 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

30#
发表于 2010-9-15 17:31 | 只看该作者
给你贴两段简单的程序说明这个问题。
第一段就会每时每刻100%,第二段就不会。

不好的程序:
while  ...
zhjecho 发表于 2010-9-15 17:03

多谢!

虽然我并不精通Windows 消息编程,但是如果是
单核CPU,即使第一种写法它也不会耗尽100% 的CPU毕竟很多线程在跑,如果它的优先级设置的特别高最多也就是它的时间片会多拿点,理论上100% 的CPU被它占用住是不可能的。
多核CPU就更不可能了。

对于你的第二种写法,有点疑问:
WaitMessage:
当一个线程的消息队列中没有消息存在时,WaitMessage函数会使该线程中断并处于等待状态,同时把控制权交给其它线程,直到被中断的那个线程的消息队列中有了新的消息为止。

你的PeekMessage都返回False了就说明消息Queue里面啥都没有,为啥你还要调用WaitMessage? 从上面文档看,WaitMessage会做许多事情,你这么频繁调用它是不是本身也在占用CPU?

我记得很多教科书上 Main函数里面并没有包含WaitMessage这个调用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-9-14 05:07

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表