1.8 KiB
1.8 KiB
TaskSystem::ParallelFor
把一个整数区间拆分成多个任务并提交执行。
template<typename Func>
void ParallelFor(int32_t start, int32_t end, Func&& func);
行为说明
当前模板实现会:
- 计算区间长度
count = end - start。 - 若
count <= 0,直接返回。 - 用
std::thread::hardware_concurrency()决定分片数量;若返回0,回退到2。 - 按
(count + numThreads - 1) / numThreads计算块大小。 - 为每个分片构造一个高优先级 lambda 任务。
- 逐个调用 Submit 提交这些任务。
参数
start- 起始索引,包含。end- 结束索引,不包含。func- 对区间内每个索引执行的可调用对象。
返回值
- 无。
当前实现限制
- 当前函数提交完任务后立即返回,不会等待所有分片完成。
- 当前按硬件并发数分片,而不是按 Initialize 配置的工作线程数分片。
- 当前头文件里模板使用了
LambdaTask和std::min,但TaskSystem.h自身没有包含LambdaTask.h和<algorithm>;如果只包含这个头,模板实例化可能失败。 - 当前底层仍然依赖 Submit,因此会继承任务生命周期悬空指针问题。
- 当
numThreads > count时,会提交一些空分片任务。
设计说明
商业级 ParallelFor 通常至少还需要:
- 同步栅栏或等待句柄。
- 更合理的分块策略。
- 工作窃取或局部队列。
- 对小任务的过度拆分抑制。
当前版本更接近“把并行循环 API 形状先搭出来”。