游戏中的多线程问题

antimatterworld 2010-05-31 10:35:08
比如像星际争霸2这样的多单位RTS游戏,如果每个兵分配2个线程,分别用于渲染和人工智能,更糟糕的是如果每个兵分配了更多的线程,又用于物理模拟等。
在处理条件竞争的时候,为了保持数据完整性,必须使用锁。
在频繁获得锁,释放锁的过程中将消耗大量的CPU资源。
锁的使用将大幅度降低程序的性能。
像星际争霸2这样的游戏,每个单位是如何使用线程的?是每个单位都分配了专用的线程,以处理该单位渲染和人工智能吗?

我觉得最好是根据CPU核心数量来决定使用线程的数量。
比如在4核CPU中,我们可以创建4个线程,1个线程用于渲染每个单位,2个线程用于处理每个单位的人工智能,1个线程用于模拟每个单位的物理特性。
也就是每个单位不再有专用于该单位的线程,每个线程将处理一组的单位。

不知道这样的想法可否用于实现多单位的RTS游戏。
...全文
391 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
volezbin 2010-06-13
  • 打赏
  • 举报
回复
!~-_-
Baesky 2010-06-11
  • 打赏
  • 举报
回复
其实游戏不需要多线程。。。。
just state。。。。
weskiter31 2010-06-11
  • 打赏
  • 举报
回复
u p
gumbour 2010-06-08
  • 打赏
  • 举报
回复
可以开多个数据线程和一个渲染线程。
多个数据线程可以同时对不同单位进行处理, 数据线程处理完后渲染线程渲染。
目前没看到采用多个渲染线程的。
xychzh 2010-06-01
  • 打赏
  • 举报
回复
每个兵都开一个线程,的确有些夸张和吓人。。
gamemagic 2010-06-01
  • 打赏
  • 举报
回复
很显然楼主的想法是完全错误的…

肯定要有一个对象列表,每帧遍历所有对象,调用其Active函数使其运动
张赐 2010-06-01
  • 打赏
  • 举报
回复
虽然不清楚是怎样的,

但是,不可能想楼主说的这样
budweiser 2010-06-01
  • 打赏
  • 举报
回复
我首先要说一点, 没有任何一个游戏会像楼主说的那样, 每个 Entity 开线程甚至是两个线程。要是这样的话,那你的游戏的多少线程啊, CPU都不用干别的事, 一直在切换线程了。。。还有我不敢想象我怎么写程序, 即使写出来了,调程序估计都得调死

所有的游戏 AI 一般都在一个线程中, 比如说 Entity 都有20个 State, 没有 State 都有对应的动画, 然后每一帧根据 具体的情况 调整每个 Entity 的 State, 也就伴随着动画的切换, 这就是 AI 的全部工作。

至于楼主说道的 充分用到多核 的优势, 一般不同的模块会用到 多线程, 比如说 网络 会开一个线程, 等等
hyq1986 2010-05-31
  • 打赏
  • 举报
回复
怎么可能每个兵都开线程,还开2个。
antimatterworld 2010-05-31
  • 打赏
  • 举报
回复
补充:如果采用4核CPU用4个线程的方案。
在渲染单位甲的时候,可以处理单位乙、丙...的人工智能,而不必使用锁。
这样如果基本能将每个线程在同时用于处理各自不同的单位,就可以基本避免锁的使用,又可以让4个CPU核心处于基本满符合运行状态。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧