Taskflow:优先级任务(Prioritized Tasking)

本文介绍了如何在Taskflow中为任务设置优先级(HIGH,NORMAL,LOW),以及Executor如何在资源受限情况下优先调度高优先级任务。尽管优先级不保证绝对按顺序执行,但可以用于指导任务调度。
摘要由CSDN通过智能技术生成

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严格按照优先级来调度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值