修复的问题: - math: 修复 Quaternion::Normalize 链接错误 - containers: HashMap 迭代器示例使用不存在的 cbegin/cend,删除冗余构造函数声明 - core: RefCounted 析构函数访问级别修正 (protected) - debug: LogLevelToString 示例返回值大小写修正 - memory: 修正 LinearAllocator::Reallocate 返回 nullptr,ProxyAllocator 统计描述,头文件路径 IAllocator.h -> Allocator.h - resources: Texture::Create mipLevels 参数描述修正 - rhi: 修复多处链接错误,新增缺失的方法文档 - threading: TaskSystem 配置项未实现状态标注,Wait 方法空实现标注
2.7 KiB
2.7 KiB
TaskSystem
命名空间: XCEngine::Threading
类型: class (singleton)
头文件: XCEngine/Threading/TaskSystem.h
描述: 并行任务调度系统单例,提供优先级任务队列。
概述
TaskSystem 是 XCEngine 的核心并行任务调度系统。它创建多个工作线程,使用优先级队列调度任务。它还提供 ParallelFor 方法用于数据级并行,以及主线程任务队列。
注意: 当前实现的 stealTasks 配置项未生效,任务系统使用单一全局任务队列而非工作窃取模式。
单例访问
| 方法 | 描述 |
|---|---|
Get |
获取单例实例 |
公共方法
生命周期
| 方法 | 描述 |
|---|---|
Initialize |
初始化任务系统 |
Shutdown |
关闭任务系统 |
任务提交
| 方法 | 描述 |
|---|---|
Submit(unique_ptr) |
提交任务对象 |
Submit(callback) |
提交 lambda 任务 |
任务组
| 方法 | 描述 |
|---|---|
CreateTaskGroup |
创建任务组 |
DestroyTaskGroup |
销毁任务组 |
等待
| 方法 | 描述 |
|---|---|
Wait |
等待指定任务完成 |
信息
| 方法 | 描述 |
|---|---|
GetWorkerThreadCount |
获取工作线程数量 |
并行 for
| 方法 | 描述 |
|---|---|
ParallelFor |
并行执行 for 循环 |
主线程
| 方法 | 描述 |
|---|---|
RunOnMainThread |
将任务提交到主线程执行 |
Update |
在主线程中处理主线程队列 |
使用示例
// 初始化(4 个工作线程)
TaskSystemConfig config;
config.workerThreadCount = 4;
TaskSystem::Get().Initialize(config);
// 提交任务
TaskSystem::Get().Submit([]() {
printf("Task 1 running\n");
});
TaskSystem::Get().Submit([]() {
printf("Task 2 running\n");
}, TaskPriority::High);
// 并行 for
TaskSystem::Get().ParallelFor(0, 1000, [](int32_t i) {
process(i);
});
// 主线程任务
TaskSystem::Get().RunOnMainThread([]() {
// 更新 UI 或其他主线程操作
});
// 主循环中调用 Update
while (running) {
TaskSystem::Get().Update(); // 处理主线程任务
}
// 关闭
TaskSystem::Get().Shutdown();
相关文档
- ITask - 任务基类
- LambdaTask - Lambda 任务
- TaskGroup - 任务组
- TaskSystemConfig - 配置
- ../threading/threading.md - 模块总览