38、并发编程中的任务调度与工作分配

并发编程中的任务调度与工作分配

1 调度界限与贪心调度

在并发任务调度中,存在一个重要的界限关系。经过分析可知,总令牌数满足以下关系:$\sum_{i = 0}^{T - 1} p_i \leq T_1 + T_{\infty}(P - 1)$。这个界限其实与最优情况相差不到两倍。实际上,要实现最优调度是一个NP完全问题,因此贪心调度成为了一种简单且实用的方法,能让性能接近最优。

2 工作分配策略

2.1 工作分配的基本需求

要实现良好的加速比,关键在于让用户级线程始终有任务可执行,使调度尽可能贪心。然而,多线程计算会动态地创建和销毁任务,有时方式难以预测。所以,需要一种工作分配算法,将就绪任务高效地分配给空闲线程。

2.2 工作分配的不同方法

  • 工作交易(Work Dealing) :过载的线程试图将任务卸载到负载较轻的线程。但这种方法有缺陷,如果大多数线程都过载,它们会在无效的任务交换尝试中浪费精力。
  • 工作窃取(Work Stealing) :当一个线程的任务执行完后,它会随机选择一个“受害者”线程,尝试从其队列顶部“窃取”任务。这种方法的优点是,如果所有线程都忙碌,它们不会浪费时间互相卸载工作。

2.3 工作窃取的实现

每个线程维护一个双端队列(DEQueue)来存储待执行的任务,提供 pushBottom() popBottom() popTop() <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值