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

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

在并发编程中,任务调度和工作分配是提高程序性能的关键因素。本文将深入探讨贪心调度、工作分配算法,特别是工作窃取算法,以及工作窃取双端队列(DEQueue)的实现。

贪心调度的边界与优势

在并发任务调度中,贪心调度是一种有效的策略。通过分析调度步骤和最长有向路径,我们可以得出贪心调度的空闲步骤上限。具体来说,贪心调度最多有 $T_{\infty}$ 个空闲步骤,每个空闲步骤最多添加 $(P - 1)$ 个令牌,因此空闲桶中最多包含 $T_{\infty}(P - 1)$ 个令牌。两个桶中的令牌总数满足 $\sum_{i = 0}^{T - 1} p_i \leq T_1 + T_{\infty}(P - 1)$。

值得注意的是,这个边界与最优调度的边界相差不超过两倍。由于实现最优调度是一个 NP 完全问题,贪心调度成为了一种简单且实用的方法,能够让程序性能接近最优。

工作分配算法

实现良好加速比的关键在于为用户级线程持续提供任务,使调度尽可能贪心。然而,多线程计算会动态地创建和销毁任务,有时甚至难以预测。因此,需要一种高效的工作分配算法,将就绪任务分配给空闲线程。

常见的工作分配方法有工作处理和工作窃取。工作处理是指过载线程将任务卸载到负载较轻的线程,但如果大多数线程都过载,这种方法会导致任务交换的徒劳努力。而工作窃取则是当线程任务耗尽时,从其他线程“窃取”工作。这种方法的优势在于,当所有线程都忙碌时,不会浪费时间进行任务卸载。

工作窃取算法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值