ParallelFor 是 UE 内置的支持多线程并行处理任务的 For 循环,在渲染系统中应用得相当普遍。
- 调用方式 函数签名
void ParallelFor(int32 Num, TFunctionRef<void(int32)> Body, bool bForceSingleThread, bool bPumpRenderingThread = false);
void ParallelFor(int32 Num, TFunctionRef<void(int32)> Body, EParallelForFlags Flags = EParallelForFlags::None);
void ParallelForTemplate(int32 Num, const FunctionType& Body, EParallelForFlags Flags = EParallelForFlags::None);
void ParallelForWithPreWork(int32 Num, TFunctionRef<void(int32)> Body, TFunctionRef<void()> CurrentThreadWorkToDoBeforeHelping, bool bForceSingleThread, bool bPumpRenderingThread = false);
void ParallelForWithPreWork(int32 Num, TFunctionRef<void(int32)> Body, TFunctionRef<void()> CurrentThreadWorkToDoBeforeHelping, EParallelForFlags Flags = EParallelForFlags::None);
- 并行方式
enum class EParallelForFlags
{
// 默认
None,
// 单线程模式 主要用于调试
ForceSingleThread = 1,
// 在线程中提供更好的任务分配 将花费更多的同步成本
// 这应该用于耗时多变的计算任务
Unbalanced = 2,
// 渲染线程 如果是在渲染线程调用 需要保证 ProcessThread 处于空闲状态
PumpRenderingThread = 4,
// 任务应该在后台优先级的线程上运行
BackgroundPriority = 8,
};
- 使用方式
ParallelFor(/* 循环次数 */,
[&](int32 Index)
{
// Code
},
/* 并行方式 */
);