Taskflow 支持给一个Task设置优先级,有助于在特定场景下的优化;总共有三种优先级:tf::TaskPriority::HIGH, tf::TaskPriority::NORMAL, 和 tf::TaskPriority::LOW。
对于一个并行Task集合(一组零依赖的Task,可并行执行),executor会尝试先调度高优先级的Task执行,默认情况下,Task的优先级都是tf::TaskPriority::HIGH。
#include <taskflow/taskflow.hpp>
void print_str(char const* str) {
std::cout << str << std::endl;
}
int main() {
tf::Executor executor(1); // 仅开一个线程,模拟资源受限情况下的调度
tf::Taskflow taskflow;
int counter = 0;
auto [A, B, C, D, E] = taskflow.emplace(
[] () { },
[&] () {
std::cout << "Task B: " << counter++ << '\n'; // 0
},
[&] () {
std::cout << "Task C: " << counter++ << '\n'; // 2
},
[&] () {
std::cout << "Task D: " << counter++ << '\n'; // 1
},
[] () { }
);
A.precede(B, C, D);
E.succeed(B, C, D);
B.priority(tf::TaskPriority::HIGH);
C.priority(tf::TaskPriority::LOW);
D.priority(tf::TaskPriority::NORMAL);
executor.run(taskflow).wait();
}
注意:Task的优先级只是对于executor的一种提示,当存在多个Worker时,不保证每个Task严格按照优先级来调度。