在游戏中并行编程

在我的游戏我有做的非常沉重的业绩计算实体(约2000-5000),每帧(或每2或3)。

我知道,并行编程将在这种情况下提供帮助。 现在的问题是怎么做的我用最好的方式多线程/ CPU-核心。

我试过静态Parallel类在.NET中,但每一个的Parallel.For / Parallel.ForEach的启动成本很简单,就是大。

是否启动多个线程每个I调用Parallel类的函数时间? 游戏的目标是FPS每秒60帧,所以whatevery方法我用,应该绝不涉及启动多个线程每场比赛帧!

所以我的问题是:什么是其他的替代品有并行处理多个实体? 我应该创建线程自己,如果是的话,有什么陷阱有哪些? 是线程池一个很好的选择?

--------------解决方案-------------

你需要一些计算机或服务器测试其他的并行编程的游戏单台计算机上明智的,因为它会在线程工作,这将花费更多。

更多地,因为一个游戏calcuated和1秒drawen 60次,对线程的工作是不符合逻辑的,你的游戏上线已经运行。

也许你不得不改变或优化算法。 不要让一切都是由CPU完成后,使用GPU尽可能。

默认情况下的Parallel.For / Parallel.Foreach使用线程池线程。 像Parallel类,任务实例等逸岸TPL API使用线程池线程。

由TPL开始线程的数量将取决于许多像在线程池提供理想的线程数等因素,因此,假如TPL会尽快将您提交请求将不会是完全正确创建大量线程。

重要的一点是你可以控制的,线程数使用TPL通过MaxDegreeOfParallelism标志执行任务。 通过设置该值说号码的“X”,则限制被加工的“X”并发的项数。 就个人而言,我觉得这是TPL库的一个非常强大的功能。

另外,如果你不想让你的任务是阻止其他请求队列中,那么你可以设置TaskCreationOptions为类型“LongRunning”的,在这种情况下,TPL将运行在一个专用的线程的任务。

你的情况,你可以尝试使用的Parallel.For /的ForEach和MaxDegreeOfParalleleism值设置为某些最优值,看看该行为。

分类:C# 时间:2012-06-05 人气:0
本文关键词: .NET,并行处理
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.430 (s). 10 q(s)