Files
XCEngine/docs/api/XCEngine/Threading/TaskSystem/ParallelFor.md

1.8 KiB

TaskSystem::ParallelFor

把一个整数区间拆分成多个任务并提交执行。

template<typename Func>
void ParallelFor(int32_t start, int32_t end, Func&& func);

行为说明

当前模板实现会:

  1. 计算区间长度 count = end - start
  2. count <= 0,直接返回。
  3. std::thread::hardware_concurrency() 决定分片数量;若返回 0,回退到 2
  4. (count + numThreads - 1) / numThreads 计算块大小。
  5. 为每个分片构造一个高优先级 lambda 任务。
  6. 逐个调用 Submit 提交这些任务。

参数

  • start - 起始索引,包含。
  • end - 结束索引,不包含。
  • func - 对区间内每个索引执行的可调用对象。

返回值

  • 无。

当前实现限制

  • 当前函数提交完任务后立即返回,不会等待所有分片完成。
  • 当前按硬件并发数分片,而不是按 Initialize 配置的工作线程数分片。
  • 当前头文件里模板使用了 LambdaTaskstd::min,但 TaskSystem.h 自身没有包含 LambdaTask.h<algorithm>;如果只包含这个头,模板实例化可能失败。
  • 当前底层仍然依赖 Submit,因此会继承任务生命周期悬空指针问题。
  • numThreads > count 时,会提交一些空分片任务。

设计说明

商业级 ParallelFor 通常至少还需要:

  • 同步栅栏或等待句柄。
  • 更合理的分块策略。
  • 工作窃取或局部队列。
  • 对小任务的过度拆分抑制。

当前版本更接近“把并行循环 API 形状先搭出来”。

相关文档