gpt4 book ai didi

c++ - 如何使用 Microsoft PPL 轻量级任务计划程序实现退避?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:04 26 4
gpt4 key购买 nike

我们使用 PPL Concurrency::TaskScheduler 将事件从我们的媒体管道发送到订阅的客户端(通常是 GUI 应用程序)。

这些事件是传递给 Concurrency::TaskScheduler::ScheduleTask() 的 C++ lambda。

但是,在负载下,管道生成事件的速度可能比客户端消耗事件的速度更快。

如果计划任务的“队列”大于 N,是否可以使用 PPL 策略使事件调度程序对事件(实际上是计划任务)进行排队?如果没有,我将如何推出自己的产品?

最佳答案

查看 API,似乎没有办法知道调度程序是否正在承受重负载,也没有办法告诉它在这种情况下如何表现。我的理解是,虽然可以使用策略来限制调度程序中可以运行的并发线程数,但我不清楚调度程序可以接受或拒绝新任务的协议(protocol)。

我敢打赌,您必须自己实现该机制,方法是计算调度程序中已有的任务数量,并在调度程序之前设置一个大小受限的队列,这有助于缓解传入任务的流量。

我想你可以为你的 lambda 使用一个简单的 std::queue,并且每次你有一个新事件时,你检查有多少任务正在运行,并从队列中添加尽可能多的任务以达到最大运行任务计数。如果之后队列仍然满,则拒绝新任务。

要处理正在运行的任务,您可以使用一个函数包装您的任务,该函数在完成时递减计数器(使用互斥锁来避免竞争),并在安排新任务时递增计数器。

关于c++ - 如何使用 Microsoft PPL 轻量级任务计划程序实现退避?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com