路由时权重和优先级的区别

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

在路由时,权重(Weight)和优先级(Priority)是两个不同的概念,它们在路由策略中起着不同的作用:

1、权重(Weight):

作用: 权重用于表示每个目标(或节点)被选择的概率。具有更高权重的目标被选择的可能性更大。
例子: 如果有三个目标,权重分别为321,那么选择目标1的概率为3/(3+2+1),选择目标2的概率为2/(3+2+1),选择目标3的概率为1/(3+2+1)

2、优先级(Priority):

作用: 优先级用于确定在有多个路由规则时,哪些规则会首先被考虑。具有更高优先级的规则会被先考虑,然后再考虑具有较低优先级的规则。
例子: 如果有两个规则,一个优先级为10,另一个优先级为5,那么优先级为10的规则会在优先级为5的规则之前被考虑。

在一些路由策略中,这两个概念可能会结合使用。例如,可以先根据优先级排序规则,然后在每个优先级中根据权重选择目标。这样可以实现更精细的路由控制,兼顾了目标选择的概率和规则的执行顺序。

分别用于控制目标的选择概率和规则的执行顺序。

可以这么理解,优先极高的先判断,但是优先级高不代表权重大,为什么要这么设计就是因为,比如有的利益最大话,可以设置成优先级高低,但是有点优先级高,但是他的陈功率比较低,所以我们要保障尽量走成功率有保障的。

/**
 * @author jiangleilei
 * @time 2024-01-15 15:01:57
 * @description TODO
 */
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class RouteRule {
    private String target;
    private int weight;
    private int priority;

    public RouteRule(String target, int weight, int priority) {
        this.target = target;
        this.weight = weight;
        this.priority = priority;
    }

    public String getTarget() {
        return target;
    }

    public int getWeight() {
        return weight;
    }

    public int getPriority() {
        return priority;
    }
}

class WeightedPriorityRouter {
    private List<RouteRule> routeRules;
    private Random random;

    public WeightedPriorityRouter() {
        this.routeRules = new ArrayList<>();
        this.random = new Random();
    }

    public void addRouteRule(RouteRule rule) {
        routeRules.add(rule);
    }

    public String route() {
        // 按照优先级降序排序
        routeRules.sort((r1, r2) -> Integer.compare(r2.getPriority(), r1.getPriority()));

        // 根据权重随机选择一个目标
        int totalWeight = routeRules.stream().mapToInt(RouteRule::getWeight).sum();
        int randomWeight = random.nextInt(totalWeight) + 1;

        //通过概率选择走哪个规则,只哟随机数小于0时才考虑。
        for (RouteRule rule : routeRules) {
            randomWeight -= rule.getWeight();
            if (randomWeight <= 0) {
                return rule.getTarget();
            }
        }

        // 如果没有匹配到,返回默认目标或者抛出异常
        return "default_target";
    }
}

public class Main {
    public static void main(String[] args) {
        WeightedPriorityRouter router = new WeightedPriorityRouter();
        router.addRouteRule(new RouteRule("target1", 3, 10));
        router.addRouteRule(new RouteRule("target2", 2, 5));
        router.addRouteRule(new RouteRule("target3", 5, 8));

        // 模拟多次路由
        for (int i = 0; i < 10; i++) {
            String target = router.route();
            System.out.println("Route to: " + target);
        }
    }
}

就是权重大的,被选中的概率一定多,但是优先考虑优先级高的。当优先级高的,没随机中,在从第二个优先级里面判断是否符合权重规则,一致遍历下去。文章来源地址https://www.toymoban.com/news/detail-792918.html

到了这里,关于路由时权重和优先级的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • c语言[]优先级大于*优先级

    本博文源于笔者正在学习的c语言[]优先级大于*优先级.在定义二维数组时,a+1与[]号结合后,谁的优先级更高,是本博文探讨的话题 想要看看*与[]谁的优先级更高 通过代码发现[]优先级比*号要高(a+1)[1]等价于a+2再取*号就是9了,在第二个pirintf代码中,等价于a[1][1] =6,第三个

    2024年01月20日
    浏览(61)
  • BGP 属性分类及路由优先级选择

    路由属性是对路由的特定描述,所有的BGP路由属性都可以分为以下4类 Origin、AS-Path 、Next hop Local-Preference、Atomic_Aggregate Community、 Aggregator MED、Originator_ID、Cluster_list、Weight 说明 :Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的 它有以下 3种类型 : IGP

    2024年02月05日
    浏览(40)
  • C语言:运算符优先级

    一、优先级(常使用的运算符) 见表格 二、注意 总体原则:算术运算符 关系运算符 逻辑运算符 赋值运算符 同一级别下的运算符的运算次序由表达式的结合方向决定 运算符 注释 级别 ( ) 圆括号 1 [ ] 数组下标 1 后置++ 后置++ 2 后置-- 后置-- 2 前置++ 前置++ 3 前置-- 前置-- 3

    2024年02月11日
    浏览(46)
  • 不同语言操作符的优先级

    看到标题,可能会心生疑惑: 这么基础且重要的操作,不同语言不应该是一致的吗? 并不一定,比如对于右移运算和加法运算,Go就与其他多数语言表现得不一致: Go: Java: C/C++: nodejs: python: php: 本文由 mdnice 多平台发布

    2024年02月14日
    浏览(48)
  • 三、路由协议——直连路由、静态路由、缺省路由、路由优先级和路由度量、路由冗余和备份(浮动静态路由)

    路由器作用:为ip数据包进行路由(选路),路由器会尽可能挑选一个最近最优的路径将报文送往其想去的目的地。 路由表:路由器用来转发数据包的一张“地图”。 Destination:目标网段 NextHop:下一跳 Interface:出接口(自身的接口) R1: R2: 注意:配置路由的时候,目标网

    2024年02月13日
    浏览(52)
  • C语言运算符优先级(大全)

    🔺按照运算符的操作对象(变量或常量)的个数分为三类: 单目运算符 ; 双目运算符 ; 三目运算符 🔺注意:当优先级相同时,按结合方向来进行计算 1.(后缀运算符) 运算符 名称 [] 数组下标 () 圆括号 . 成员选择 - 成员选择 🔴结合方向从左到右 “.” 和 \\\"-\\\"多用在结构

    2024年02月06日
    浏览(44)
  • android:persistent和android:priority的区别,对进程优先级有什么影响?

    前言:写的apk因为系统busy给我kill了,(adj 900): kill all background,在AndroidManifest.xml添加android:persistent=\\\"true\\\"后,被甲方要求不能这样做,还是得从adj改,把 priority改成1000 android:persistent和android:priority是两个不同的属性,它们分别用于不同的目的。 android:persistent:用于设置应用组

    2024年01月25日
    浏览(39)
  • 【JAVA】优先级队列(堆)

    羡慕别人就让自己变得更好! 优先级队列(堆)可用于topK问题 有大小根堆 注意堆的模拟实现 坚持真的很难但是真的很酷! 队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列。 此时,数据结

    2024年02月15日
    浏览(51)
  • Java优先级队列-堆

    大家好,我是晓星航。今天为大家带来的是 Java优先级队列(堆) 的讲解!😀 使用数组保存二叉树结构,方式即将二叉树用 层序遍历 方式放入数组中。 一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。 这种方式的主要用法就是堆的表示。 已知双亲(parent)的下

    2023年04月16日
    浏览(41)
  • 【堆的认识及其优先级队列】java代码实现,保姆级教程学习堆和优先级队列

    前言: 大家好,我是 良辰 丫💞💞⛽,我们又见面了,前面我们讲了用链表实现的二叉树,今天我们来接触 堆 的概念,堆是一种特殊的二叉树,只不过咱们的对底层原理是数组,堆也是我们在做题中经常见到的,那么,接下来我们就慢慢的去接触堆, 认识堆,理解堆,掌

    2024年02月02日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包