一、核心特性
- Header-only:无外部依赖,仅需包含头文件即可使用。
- 支持静态与动态任务图:
- 静态图:编译时或初始化时确定结构。
- 动态图:运行时可动态构建子图(如递归、条件分支)。
- 高效 work-stealing 调度器:基于 per-thread deque,减少锁竞争。
- GPU 任务支持(需 CUDA):可调度 CUDA kernel 或流。
- 条件任务(Condition Task):支持运行时分支(类似 if/else)。
- 模块化子图(Subflow):可嵌套任务图,实现递归或模块化设计。
- 性能优于 TBB flow_graph 和 OpenMP task(官方 benchmark 显示)。
二、基础使用示例
#include <taskflow/taskflow.hpp>
int main() {
tf::Executor executor;
tf::Taskflow taskflow;
auto [A, B, C, D] = taskflow.emplace([](){ std::cout << "Task A\n"; }, [](){ std::cout << "Task B\n"; }, [](){ std::cout << "Task C\n"; }, [](){ std::cout << "Task D\n"; });
A.precede(B, C); // A → B, A → C
B.precede(D); // B → D
C.precede(D); // C → D
executor.run(taskflow).wait();
return 0;
}
输出顺序保证:A 先执行,B/C 并行执行,D 最后执行。
三、高级用法详解
1. 动态子图(Subflow)
适用于递归、分治、运行时展开的任务结构。
tf::Task parent = taskflow.emplace([&](tf::Subflow& sf){
for (int i = 0; i < 4; ++i) {
sf.([i](){ std::cout << << i << ; });
}
}).();

