游戏的实际线程处理可以开始之前,可执行几个步骤以帮助线程代码以最佳方式运行。针对功能分解线程模型对游戏进行线程处理时,这些步骤是必要的。
确定功能块
首先,确定游戏中的不同功能块。这应该是一个相当简单的过程,因为典型的游戏设计围绕着说明功能块的文档开展。此步骤包括确定块之间的交互作用和程序执行顺序,这应该会形成一个块流程图。
请注意,可能需要根据下面两部分中的步骤结果重新设计此块流程图。这些更改将在项目设计期间和实施阶段发生。
确定块之间的相关性
列出功能块及它们之间的相互连接后,必须确定所有块之间的数据相关性。此信息有助于确定是否应该复制数据组,或者是否应该同步对数据组的访问。决定这些情况时需要考虑几个因素,但主要因素是数据大小。在串行代码段中复制数据以及在并行代码段中同步数据访问可能会比较快。

(单击查看大图)
确定线程划分
可以根据数据相关性和处理器使用情况来匹配不同的代码块。请尝试公平处理,将相应的代码块置于相应的线程中。在两个或四个线程的每一个线程中放置功能的方法要使得线程几乎同时完成其执行任务。这样,一个线程在其他线程完成执行任务之前不会等待太长时间,因而不会浪费时间。
要考虑的另一个问题是正确均衡执行任务是否会导致程序花费更多时间复制数据或同步数据访问。用于访问同一数据的功能应该位于同一线程上(如果可能)。这样,它们便可以按顺序执行,而且可避免同步需要。选择的方法取决于数据访问方式。如果按顺序访问数据且处理器均衡支持将两个功能置于单独的线程上,则同步访问效果会更好。
遗憾的是,确定均衡时没有一种妥善的解决方案。为了获得最佳的可能组合,必须进行某些实验。请注意,即使线程实现并不理想,但仍然还是比让处理器浪费时间更好一点。
在考虑在多个处理器上均衡性能时,不要与特定数目的处理器进行太多连接,这一点非常重要。针对线程处理优化代码时,还应该针对未知数目的处理器对其进行优化。我们正在开发的一些芯片支持许多处理器,因此几乎无法预测未来代码可以利用多少处理器。请设计并行化方案,以将功能进行排队并在处理器可用时执行。这样一来,代码将支持系统中的 1 到 n 个处理器,其中 n 为所管理的要实现并行化的任务数。