Max-Min算法

这篇具有很好参考价值的文章主要介绍了Max-Min算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任务调度算法,随着多核处理器的发展,带来了新的挑战。如何利用高效的任务调度策略使得多核处理器充分发挥性能,是急需解决的问题。动态任务调度是根据运行时的情况动态的将任务分配到对应的资源上,但是需要实时的收集系统计算资源、存储资源以及网络资源等信息,有一定的系统开销,不过相较于资源利用率的提升,动态资源调度也是很有意义的。
经典的调度算法有:Min-Min调度算法、Max-Min调度算法、MCT最小完成时间、MET最小执行时间等算法。由于Max-Min算法来自于Min-Min算法,因此先介绍Min-Min算法,再介绍Max-Min算法。

Min-Min算法

Min-Min算法是一个传统的任务调度算法,核心思想是以最快的时间进行任务分配和处理,时间是唯一考虑的权重。将任务调度到处理时间最短的资源上,保证任务完成时间最短。Min-Min算法是网格计算中主要的任务调度策略之一。Min-Min算法主要思想如下:
假设网格环境是由 n个任务 T={T1,T2,…,Tn}和 m个资源 R={R1,R2,…,Rm}组成。当任务集合不为空时,通过执行以下流程来使得任务集合为空

  1. 对于任务集合中的任意一个任务Ti,计算调度到所有资源R中的任务最小完成时间。假设在第k(k <= m)个资源上任务能最早完成,那么最小完成时间就是minTime = MCT(i, k)。就得到一个含有n个元素的以为数组minTime。
  2. 假设第i个元素是minTime数组中最小的,对应的资源为h,那么就把任务Ti分配到资源h上去。
  3. 从任务集合中把任务Ti删除,再返回第1步。
  4. 任务调度集合为空时,就结束调度程序。

Min-Min算法存在一个很大的缺点,就是算法总是优先分配小任务、最快完成时间的任务,而忽略了网格资源的负载均衡,网格处于一个异构的环境中时,机器的处理能力有可能会主导任务的调度策略,换句话说如果一个计算节点的计算能力超过其他所有节点,那么任务就会堆砌到这一个计算节点上,导致资源利用率低下。另外一个方面,由于对于每个任务都需要计算在对应资源下的完成时间,因此会有不小的系统开销,大量任务到来的情况下调度的时延可能会很长。

Max-Min算法

Max-Min算法与Min-Min算法很类似,只是将上述Min-Min算法流程中的选择minTime数组中最小的值改为选择最大的值,将在minTime数组中选择最大的值,比如说最大值对应的是maxTime = MCT(i, k),就将任务i分配给资源k。
Max—Min算法的目的是为了 最小化由于执行需要长执行时间的任务而导致的部分资源负载过大而部分资源空闲的极度负载不均衡的后果。因此在元任务是由许多短任务和少数长任务组成的情况下。Max—Min调度算法可以做到相对来说负载均衡。但是Max-Min算法也会造成完成时间较小的任务等待时间过长的问题,影响作业执行的效率,也有可能导致负载不均衡。
最大最小算法定义如下:

  1. 资源按照需求递增的顺序进行分配
  2. 不存在用户得到的资源超过自己的需求
  3. 未得到满足的用户等价的分享资源

考虑用户集合 1, …, n,分别有资源需求 x1,x2,…,xn。不失一般性,令资源需求满足 x1 <= x2 <= … <= xn。令服务器具有能力 C。那么,初始把 C/n 资源给需求最小的用户,这可能会超过用户 1 的需求,继续处理。该过程结束时,每个用户得到的没有比自己要求更多,而且,如果其需求得不到满足,得到的资源也不会比其他用户得到的最多的资源还少。我们之所以称之为最大最小公平分配是因为我们最大化了资源得不到满足的用户最小分配的资源。
一个通俗的例子:有一四个用户的集合,资源需求分别是 2,2.6,4,5,其资源总能力为 10,为其计算最大最小公平分配。
解决方法:通过几轮的计算来计算最大最小公平分配。第一轮,我们暂时将资源划分成 4 个大小为 2.5 的。由于这超过了用户 1 的需求,这使得剩了 0.5 个均匀的分配给剩下的 3 个人资源,给予他们每个 2.66。这又超过了用户 2 的需求,所以拥有额外的 0.066… 来分配给剩下的两个用户,给予每个用户 2.5 + 0.66 … + 0.033… = 2.7。因此公平分配是:用户 1 得到 2,用户 2 得到 2.6,用户 3 和用户 4 每个都得到 2.7。

基于权重的Max-Min算法

上述假设是基于所有用户具有相同的权限来获取资源,有时候需要给一些用户更大的配额。例如,可能会给不同的用户 1, …, n 关联权重 w1, w2, …, wn,这反映了他们间的资源配额。通过定义带权的最大最小公平分配来扩展最大最小公平分配的概念以使其包含这样的权重:

  1. 资源按照需求递增的顺序进行分配,通过权重来进行标准化
  2. 不存在用户得到超过自己需求的资源
  3. 未得到满足的用户按照权重均分获取资源

一个通俗的例子: 有一四个用户的集合,资源需求分别是 4,2,10,4,权重分别是 2.5,4,0.5,1,资源总能力是 16,为其计算最大最小公平分配。
解决办法 第一步是标准化权重,将最小的权重设置为 1。这样权重集合更新为 5,8,1,2。这样就假装需要的资源不是 4 份而是 5 + 8 + 1 + 2 = 16 份。因此将资源划分成 16 份。在资源分配的每一轮,按照权重的比例来划分资源,因此,在第一轮,计算C/n为16/16 = 1。在这一轮,用户分别获得 5,8,1,2单元的资源,用户1得到了 5 个资源,但是只需要 4,所以多了 1 个资源,同样的,用户 2 多了 6 个资源。用户 3 和用户 4 拖欠了,因为他们的配额低于需求。现在有 7 个单元的资源可以分配给用户 3 和用户 4。他们的权重分别是 1 和 2,最小的权重是 1,因此不需要对权重进行标准化。给予用户 3 额外的 7 × 1/3 单元资源和用户 4 额外的 7 × 2/3 单元。这会导致用户 4 的配额达到了 2 + 7 × 2/3 = 6.666,超过了需求。所以将额外的 2.666 单元给用户 3,最终获得 1 + 7/3 + 2.666 = 6 单元。最终的分配是 4,2,6,4,这就是带权的最大最小公平分配。
参考:https://oldtang.com/109.html文章来源地址https://www.toymoban.com/news/detail-679418.html

到了这里,关于Max-Min算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink学习20:聚合算子(sum,max,min)

    常见的聚合算子 sum,max,min等 聚合算子可以在在keyedStream 流上进行滚动的聚合(即累计的操作),而且同一个 keyedStream 流上只能调用一次 聚合算子      

    2024年02月07日
    浏览(47)
  • 【C++】详解 INT_MAX 和 INT_MIN(INT_MAX 和 INT_MIN是什么?它们的用途是什么?如何防止溢出?)

    目录 一、前言  二、什么是 INT_MAX 和 INT_MIN ? 三、INT_MAX 和 INT_MIN 的用途  四、如何避免溢出问题出现 ?  五、 INT_MAX 和 INT_MIN 的运算  六、leetcode 常考面试题  七、共勉     大家在平时刷 leetcode 的时候,肯定会碰到 溢出问题 ,之后查看题解,大部分题解都会通过 INT_

    2024年03月26日
    浏览(43)
  • Go 1.21.0 新特性min 和 max 内置函数解析

    Go 1.21.0 是 Go 语言的最新版本,它将在 2023 年 8 月发布,会带来了一些语言和工具的变化。其中一个值得关注的变化是增加了两个新的内置函数 min 和 max,用来对任意可比较类型进行最小值和最大值的操作。这是很常见的需求,现在有内置实现了。本文将介绍这两个函数的背

    2024年02月12日
    浏览(32)
  • SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示

    SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别。以下是它们的用法和示例: MIN()函数返回所选列的最小值。 示例: 查找Products表中的最低价格: MAX()函数返回所选列的最大值。 示例: 查找Products表中的最高价格: MIN()和MAX()函数的一般语法如下: 以下是

    2024年03月20日
    浏览(47)
  • python入门,数据容器的通用操作(len,max,min,sorted)

        list(容器)将给定容器转化为列表 字符串转列表将字符串内的每一个元素都取了出来作为列表的每一个元素 字典则只会取出它的key,value会消失 str(容器)将给定容器转化为字符串 转化为字符串相当于在容器的两边加上双引号 tuple(容器)将给定容器转化为元组 set(

    2024年01月16日
    浏览(30)
  • Min_element / Max_element 函数(C/C++)

      用于查找容器或者数组区间内的最值的时候进行搜索   Iterator min_element() / max_element(排序起始位置,排序结束位置,排序方式)   A. 可以省略排序方式   省略排序方式则默认min_element()查找区间内的最小值,max_element()查找区间内的最大值的元素信息,如果设置了排序方式

    2024年02月13日
    浏览(30)
  • jenkins把报错apply min/max thresholds result unstables,如何解决

    jenkins把报错apply min/max thresholds result unstables,如何解决 答案: 要解决Jenkins中报错\\\"apply min/max thresholds result unstables\\\"的问题,可以尝试以下几个步骤: 检查阈值设置:确认阈值设置是否正确。可能是由于设置的阈值不合适导致报错。确保设置的最小和最大阈值与实际情况相符

    2024年02月11日
    浏览(32)
  • springboot的 spring.redis.lettuce的max-active、max-idle、min-idle的搭配

    在Spring Boot中,使用Lettuce作为Redis客户端是一种常见的选择。Lettuce是一个高性能、可扩展的异步Redis客户端。下面是关于 application.yml 配置文件中 spring.redis.lettuce 的一些配置: 配置项的含义: spring.redis.host 和 spring.redis.port :配置Redis服务器的主机名和端口号。 spring.redis.dat

    2024年02月12日
    浏览(25)
  • 时序约束——set_max_delay和set_min_delay用法

    set_max_delay:最大延迟约束 set_min_delay:最小延迟约束 约束原语: set_max_delay [-datapath_only] [-from node_list] [-to node_list] [-through node_list] set_min_delay [-from node_list] [-to node_list] [-through node_list] 一般在约束异步信号时可以使用。针对跨时钟域的异步信号,常使用set_false_path或者set_clock

    2023年04月08日
    浏览(29)
  • Python3 max() 函数 -求最大值、Python3 min() 函数 -求最小值

    ​ max() ​ 方法返回给定参数的最大值,参数可以为序列。 以下是​  max() ​ 方法的语法: x -- 数值表达式。 y -- 数值表达式。 z -- 数值表达式。 返回给定参数的最大值。 以下展示了使用 ​ max() ​ 方法的实例: 尝试一下 以上实例运行后输出结果为: ​ min()  ​方法返回给

    2023年04月26日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包