当前位置: 首页 > news >正文

省住房和城乡建设厅网站/站外推广免费网站

省住房和城乡建设厅网站,站外推广免费网站,设计制作活动主题,wordpress安装免费HTTPS《消息队列》专栏介绍 目录 《消息队列》专栏介绍专栏导言什么是消息队列呢?应用场景(作用) 为什么要用消息队列呢?异步处理削峰填谷 举个例子 分布式消息队列的优势 应用解耦优点发布订阅优点 分布式消息队列应用场景不同消息队列…

《消息队列》专栏介绍

目录

  • 《消息队列》专栏介绍
  • 专栏导言
  • 什么是消息队列呢?
        • 应用场景(作用)
  • 为什么要用消息队列呢?
        • 异步处理
        • 削峰填谷
    • 举个例子
  • 分布式消息队列的优势
        • 应用解耦优点
        • 发布订阅优点
  • 分布式消息队列应用场景
  • 不同消息队列的对比
  • 为什么需要开一个专栏来将消息队列
  • 关于更新

专栏导言

在当今快节奏的数字化世界中,实时性和可靠性是现代软件开发中的关键词。为了满足用户对即时反馈和高性能的需求,开发人员需要寻找一种高效的通信机制。而消息队列作为一种强大的解决方案,正变得越来越受欢迎。

想象一下,你正在使用一个电商应用程序,下单后希望立即收到订单确认。但是,如果应用程序处理订单的过程变得非常耗时,你可能会感到沮丧。这就是消息队列的用武之地。通过将任务异步处理,应用程序可以立即发送订单确认消息给你,然后在后台处理订单,而不会对用户体验产生任何延迟。

我们现在假设一个开发情景:如果你的系统功能越来越多,长耗时的任务越来越多,系统会越来越复杂,当然我们可以开线程池来解决(我会单独写一篇博客来将JUC线程池的实现),但是线程池是有缺陷的,他只能通过单机部署,如果我们用户量大,改为分布式,多台服务器部署(假设有m台),每个服务器都需要有n个线程,那就需要m*n个线程,会超出服务的限制,资源也会出现抢占。

那么如何解决呢?

  • 服务拆分(应用解耦):其实我们可以把长耗时、消耗很多的任务把它单独抽成一个程序,不要影响主业务。
  • 解决方案:可以有一个中间人,让中间人帮我们去连接两个系统(比如核心系统和智能生成业务)

什么是消息队列呢?

  1. 简单来说,消息队列是一种允许应用程序之间异步通信的机制。它通过解耦生产者和消费者之间的直接依赖关系,实现了高度可扩展性和灵活性。

    消息队列的工作原理很简单:生产者将消息发送到队列中,然后消费者从队列中获取消息并进行处理。这种异步的方式允许生产者和消费者在不需要实时交互的情况下进行独立的操作。这种解耦能力使得消息队列在许多场景下非常有用,例如在分布式系统中进行任务处理、流量控制、日志收集和系统解耦等。未来详细讲解各种场景的使用。

  2. 通俗易懂一些,消息队列就是存储消息的队列。他是一种在应用程序之间传递消息的通信机制。它类似于实际世界中的一个邮箱系统,发送者将消息放入消息队列,接收者从队列中获取消息进行处理。这种异步的方式可以提高系统的性能和可靠性,因为发送者和接收者可以独立地进行操作,并且不需要直接相互依赖。

    消息队列允许不同的应用程序、服务或组件之间解耦,它们可以独立地进行伸缩和维护。消息队列还提供了可靠性和持久性的保证,因为消息可以在发送时进行持久化,并且在接收者处理之前可以进行多次尝试。

  3. 消息队列包含的关键词:存储、消息、队列

    • 存储:存储数据
    • 消息:某种数据结构:比如字符串、对象、二进制、JSON等等
    • 队列:一种先进先出的数据结构

    应用场景(作用)

    在多个不同的系统、应用之间实现消息的传输(也可以存储)。不需要考虑传输应用的编程语言、系统、框架等等。

    例如:可以让Java开发的应用发消息,让PHP开发的应用收消息,这样就不用把所有代码写到同一个项目里 (应用解耦)

为什么要用消息队列呢?

使用消息队列有以下几个主要原因:

  1. 解耦和提高系统可靠性:消息队列提供了解耦的方式,发送方和接收方之间不直接进行通信,通过消息队列中转。这样,即使其中一个组件或者系统出现故障,不会影响到整个系统的正常运行。
  2. 异步处理和提高系统性能:消息队列可以使发送方和接收方异步处理消息。发送方将消息发送到队列中后,不需要等待接收方立即处理,而是可以继续处理其他任务。这样可以提高系统的性能和响应速度。
  3. 缓冲和流量控制:消息队列可以作为缓冲区,用于处理流量峰值。当系统面临突发的请求量增加时,消息队列可以缓冲请求并逐渐处理,避免系统过载。
  4. 同步数据:在分布式系统中,不同组件或者系统之间可能需要共享数据。通过消息队列可以实现数据的同步和共享,保证各个组件之间的数据一致性。
  5. 扩展和灵活性:使用消息队列可以通过增加消费者来实现系统的扩展性,并且消费者可以根据需求灵活地进行扩缩容。这样可以根据实际需求进行系统的调整和优化。

异步处理

生产者发送完消息之后,可以继续去忙别的,消费者想什么时候消费都可以,不会产生阻塞。

削峰填谷

先把用户的请求放到消息队列中,消费者(实际执行操作的应用)可以按照自己的需求,慢慢去取。

举个例子

  • 没有使用消息队列:12点时来了10万个请求,原本情况下,10万个请求都在系统内部立刻处理,很快系统压力过大就宕机了。
  • 使用消息队列:把这10万个请求放到消息队列中,处理系统以自己的恒定速率(比如每秒1个)慢慢执行,从而保护系统、稳定处理。类似于管道一样流水式处理。

分布式消息队列的优势

在如今的后台开发中,最常用的一种消息队列就是分布式消息队列了,也是效率最高的,因此本专栏重点讲解分布式消息队列。

分布式消息队列是消息队列的一种。传统的消息队列通常在单个节点上运行,而分布式消息队列可以在多个节点上分布运行,实现更高的吞吐量和可伸缩性。它可以用于解耦、异步通信和扩展系统等方面的应用。常见的分布式消息队列包括 Apache Kafka、RabbitMQ、ActiveMQ 等。

  1. 数据持久化:它可以把消息集中存储到硬盘里,服务器重启就不会丢失
  2. 可扩展性:可以根据需求,随时增加(或减少)节点,继续保持稳定的服务
  3. 应用解耦:可以连接各个不同语言、框架开发的系统,上这些系统能够灵活传输读取数据
  4. 发布订阅:它可以使发布者将消息发送到一个或多个订阅者,从而实现解耦、可伸缩性和实时性等优势
    1. 解耦性:发布者和订阅者之间是松耦合的,彼此不需要直接通信。发布者只需要将消息发布到特定的主题或频道中,而订阅者只需要订阅感兴趣的主题或频道。这种解耦性使得系统中的组件可以独立地进行开发、维护和扩展。
    2. 可伸缩性:发布订阅模式允许多个订阅者同时接收消息,并且可以动态地添加或移除订阅者。这种可伸缩性使系统能够处理更高的并发量,而不会对性能和可用性产生负面影响。
    3. 实时性:由于发布订阅模式支持多个订阅者同时接收消息,可以更快地将消息传递给订阅者。这种实时性使系统能够实现即时的数据传输和处理,适用于需要快速响应的场景。
    4. 可靠性:分布式消息队列通常提供了消息持久化的机制,可以将消息存储到磁盘上,确保消息不会丢失。即使消费者出现故障,稍后再启动时也可以继续接收之前未处理的消息。

应用解耦优点

不使用消息队列时:

把所有的功能都放在同一个项目中,调用多个子功能时,一个环节错,整个系统就出错

使用了消息队列进行解耦:

  1. 一个系统挂了,不影响另一个系统:如果发货系统挂了,但是不影响到库存系统进行扣减
  2. 系统挂了并恢复后,仍然可以从消息队列当中取出消息,继续执行业务逻辑
  3. 只要发送消息到队列,就可以立刻返回,不用同步调用所有系统,性能更高

订单系统只要将消息发送到消息队列,即可返回,并不需要调用其他的系统,而其他的系统只要从消息队列中获取到消息。

发布订阅优点

发布订阅优势图解:

如果一个非常大的系统要给其他子系统发送通知,最简单直接的方式是大系统直接依次调用小系统

比如QQ:使用QQ来关联了很多应用的消息,比如王者、吃鸡、微信等等

这样做存在的问题:

  1. 每次发通知都要调用很多系统,很麻烦、有可能失败
  2. 新出现的项目(或者说大项目感知不到的项目)无法得到通知
  3. 发布的消息不知道哪个系统需要

解决方案:大的核心系统始终往一个地方(消息队列)去发消息,其他的系统都去订阅这个消息队列(读取这个消息队列中的消息)

分布式消息队列应用场景

未来会详细讲解常用的应用场景

  1. 耗时的场景(异步)
  2. 分布式系统协作(尤其是跨团队、跨业务协作,应用解耦)
  3. 强稳定性的场景(比如金融业务:支付、转账,特久化、可靠性、削峰填谷)
  4. 异步通信:当系统需要在不同模块之间进行异步通信时,分布式消息队列可以提供一种可靠的通信机制。
  5. 解耦应用:当多个应用或服务之间需要解耦,以降低耦合度、提高灵活性和可维护性时,使用分布式消息队列可以实现解耦。
  6. 流量削峰:在高峰期或服务器负载高的情况下,分布式消息队列可以将流量平滑分发到不同的消费者上,避免系统过载。(高并发场景、异步、削峰填谷
  7. 日志处理:对于大规模的日志处理场景,分布式消息队列可以帮助将日志收集、传输和处理进行解耦,并且可以容错和持久化。
  8. 事件驱动架构:在事件驱动的架构中,各个组件通过订阅消息实现解耦,以便在事件发生时进行相应的处理。

不同消息队列的对比

主要是参考以下几个技术指标进行选择对应的消息队列来开发

  1. 吞吐量:IO、并发。(表示单位时间内完成的操作次数、传输的数据量或处理的任务数量)

  2. 时效性:类以延迟,消息的发送、到达时间

  3. 可用性:系统可用的比率(比如1年365天宕机1s,可用率大概X个9)


    可用性的计算公式是:可用时间 / (总时间 - 计划停机时间)。

    总时间 = 365 * 24 * 60 * 60 = 31,536,000 秒。

    计划停机时间 = 1 秒 * 365 天 = 365 秒。

    可用时间 = 总时间 - 计划停机时间 = 31,536,000 - 365 = 31,535,635 秒。

    可用性 = 31,535,635 / 31,536,000 ≈ 0.999988 ≈ 99.9988%。

    所以,该系统的可用性为约99.9988%。

  4. 可靠性:消息不丢失(比如不丢失订单)、功能正常完成

  • 吞吐量(Throughput)指的是系统在单位时间内能够处理的请求或传输的数据量。在消息队列中,吞吐量表示系统能够处理的消息数量或传输的数据量。较高的吞吐量意味着系统能够更快地处理请求或传输数据。

    * 时效性(Latency)指的是从发出请求到收到响应所经历的时间间隔。在消息队列中,时效性表示从消息被发送到消息被接收和处理的时间。较低的时效性意味着消息能够更快地被传输、接收和处理。

消息队列吞吐量(QPS)时效性可用性可靠性优势缺点应用场景
ActiveMQ中等:万级中等成熟的JMS支持、简单易学性能相对较低中小型企业应用,可靠的消息传递和事务
RabbitMQ中等:万级极高(微秒单位)灵活的路由策略、生态好、时效性高、易学对大吞吐量的支持相对较弱复杂的消息路由和灵活的消息处理、适用于大部分的分布式系统
Kafka高:十万级高(毫秒以内)极高极高高吞吐量和低延迟、可靠性、强大的数据流处理能力复杂性较高,初学者上手难度大大数据流处理,日志收集,实时数据流传输、事件流收集传输等
RocketMQ高:十万级高(毫秒)极高极高可靠性、可用性、吞吐量大、分布式事务支持对复杂性的支持相对不足大规模的分布式应用,高可用性和事务一致性要求 适用于金融、电商等对可靠性要求较高的场景,适合大规模的消息处理
ZeroMQ中等:万级简单的消息传递机制缺乏对复杂消息路由的支持轻量级异步通信,构建快速分布式系统
Pulsar高:十万级高(毫秒)极高极高可靠性、可用性很高、基于发布订阅模型、新兴技术结构、云原生架构支持部署和运维相对复杂适用大规模数据处理,实时分析,高并发的分布式系统。适合实时分析、事件流处理、IoT数据处理等。
Apache InLong (Tube)高:十万级数据传输和大数据处理集成社区生态相对较小实时分析,数据集成

为什么需要开一个专栏来将消息队列

为什么我们需要开一个专栏来深入探讨消息队列呢?

  1. 复杂性的增加:

    随着软件系统的不断扩展和发展,系统之间的通信变得越来越复杂。传统的同步通信方式已经无法满足现代分布式系统的要求。消息队列通过提供异步通信的能力,将生产者和消费者解耦,从而简化了系统之间的通信。开设专栏可以帮助读者理解消息队列的基本概念和原理,并掌握如何在复杂系统中应用它们。

  2. 实时性和性能的需求:

    随着用户对实时性和高性能的要求不断增加,开发人员需要寻找一种能够提供快速响应和高吞吐量的通信方式。消息队列能够以异步的方式处理任务,从而提高系统的响应速度和整体性能。通过专栏的介绍,读者可以学习如何利用消息队列来满足这些实时性和性能需求。

  3. 大规模系统的挑战:

    在大规模分布式系统中,有效地处理和管理海量的消息是一项巨大的挑战。消息队列提供了分布式消息传递、负载均衡和容错机制,能够应对系统规模的扩展性和可靠性要求。通过专栏的学习,读者可以了解如何应对大规模系统中的消息处理问题,并学习一些最佳实践和经验。

  4. 应用场景的多样性:

    消息队列在各个领域都有广泛的应用,如微服务架构、实时数据处理、日志收集和分析等。开设专栏可以涵盖各种应用场景,并通过具体案例帮助读者理解如何在实际项目中应用消息队列。这将帮助读者掌握不同领域中消息队列的实现方式和技巧。

  5. 技术知识的普及:

    消息队列是一项复杂的技术,对于初学者来说可能有一定的学习曲线。通过开设专栏,我们可以以通俗易懂的方式介绍消息队列的概念和原理,并提供详细的实例和图解,帮助读者快速入门和理解关键概念。

关于更新

作者是学生党一枚,能力有限,本着学到哪里更新到哪里的原则。因此我所更新到专栏的知识,一定是我在学习的过程中认为十分重要的,并且自己实践过的内容,也当做我个人的笔记记录。当然也难免会有差错,有问题还请大家及时提出,私信或者评论区交流,谢谢大家!

相关文章:

《消息队列》专栏介绍

《消息队列》专栏介绍 目录 《消息队列》专栏介绍专栏导言什么是消息队列呢?应用场景(作用) 为什么要用消息队列呢?异步处理削峰填谷 举个例子 分布式消息队列的优势 应用解耦优点发布订阅优点 分布式消息队列应用场景不同消息队列…...

各类工具使用详情【持续更新】

详解nc命令 https://blog.csdn.net/qq_42875470/article/details/114778326 xray工具使用 sqlmap工具使用 burp工具使用 nmap工具使用 appscan工具使用 fscan工具使用...

docker容器的安装和基础练习

目录 一.安装docker服务,配置镜像加速器 二.下载系统镜像(Ubuntu、 centos) 三.基于下载的镜像创建两个容器 (容器名一个为自己名字全拼,一个为首名字字母) 四.容器的启动、 停止及重启操作 五.怎么查…...

WordPress 后台密码忘记后,重置找回密码的 N 种方法

文章目录 一、通过其他管理员修改密码二、通过电子邮件找回密码三、通过 MySQL 命令行设置新密码四、主题文件functions.php添加代码重置密码五、使用官方脚本重置密码 忘记密码是每个人都会遇到的事情,长时间不登录 WordPress 站点后,作为管理员的你&am…...

将PyCharm中的终端运行前面的PS修改成当前环境

最近使用Pycharm中的Terminal来pip安装一些pakage,发现Terminal运行前面的显示的是PS,然后输入安装指令报错。“python无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。” 解决方法: 只需要在pycharm的设置中修改一些termi…...

Linux系统编程—socket网络编程

Linux系统编程—socket网络编程 理论概念1. TCP与UDP对比端口号作用 socket开发过程服务端1. socket 创建套接字2. bind 绑定IP端口3. listen 监听客户端4. accept 接收客户端5. read / write 数据传输 客户端1. socket 创建套接字2. connect 连接服务3. read / write 数据传输…...

函数指针

函数指针是一种特殊类型的指针,它指向一个函数而不是指向数据。函数指针允许你在程序运行时动态地选择要调用的函数,这对于实现回调函数、事件处理、动态加载库和创建通用函数接口等任务非常有用。 1. 声明函数指针 要声明一个函数指针,你需…...

Linux——进程间信号(超级详解!!)

索引 一.初始信号1.什么是信号2.前后台进程3.信号的种类4.信号的管理 二.信号产生前1.验证键盘是可以产生信号的2.通过系统调用接口发送信号3.由软件条件产生信号4.硬件异常产生信号5.总结6.core dump 信号产生中1.信号在内核中的表示2.信号集操作函数 信号产生后1.了解内核态和…...

C++ STL库的介绍和使用

文章目录 C STL库的介绍和使用STL六大组件算法的分类迭代器 一个简单的例子容器和自定义类型容器嵌套容器常用容器stringvectordequestackqueuelistset/multisetpairmap/multimap 容器的使用时机函数对象(仿函数)谓词内建函数对象适配器bind2nd和bind1st…...

Excel数学、工程和科学计算插件:FORMULADESK Studio

如果 Excel 是您的武器 - 让我们磨砺您的剑!为整天使用 Excel 的人们提供创新的 Excel 加载项,你需要这个 FORMULADESK Studio。。。 Excel 插件为任何使用 Excel 执行数学、工程和科学计算的人提供了必备工具。 * 将公式视为真正的数学方程 * 为您的公…...

大规模 Spring Cloud 微服务无损上下线探索与实践

文章目录 什么是无损上下线?大规模 Spring Cloud 微服务架构实现无损上下线的挑战无损上下线的实践1. 使用负载均衡器2. 使用数据库迁移工具3. 动态配置管理4. 错误处理和回滚 未来的趋势1. 容器编排2. 服务网格3. 自动化测试和验证 结论 🎉欢迎来到云原…...

【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点

题目: 给定一棵二叉搜索树,请找出其中第 k 大的节点的值。 示例 1: 输入: root [3,1,4,null,2], k 13/ \1 4\2 输出: 4 示例 2: 输入: root [5,3,6,2,4,null,null,1], k 35/ \3 6/ \2 4/1 输出: 4 限制: 1 ≤ k ≤ 二叉搜索树…...

C++设计模式_03_模板方法Template Method

文章目录 1. 设计模式分类1.1 GOF-23 模式分类1.2 从封装变化角度对模式分类 2. 重构(使用模式的方法)2.1 重构获得模式 Refactoring to Patterns2.2 重构关键技法 3. “组件协作”模式4. Template Method 模式4.1 动机( Motivation&#xff…...

【LeetCode-中等题】79. 单词搜索

文章目录 题目方法一:递归 回溯 题目 方法一:递归 回溯 需要一个标记数组 来标志格子字符是否被使用过了先找到word 的第一个字符在表格中的位置,再开始递归递归的结束条件是如果word递归到了最后一个字符了,说明能在矩阵中找到单…...

揭秘iPhone 15 Pro Max:苹果如何战胜三星

三星Galaxy S23 Ultra在我们的最佳拍照手机排行榜上名列前茅有几个原因,但iPhone 15 Pro Max正在努力夺回榜首——假设它有一个特定的功能。别误会我的意思,苹果一直在追赶三星,因为它的iPhone 14 Pro和14 Pro Max都表现强劲。尽管如此&#…...

分布式秒杀方案--java

前提:先把商品详情和秒杀商品缓存redis中,减少对数据库的访问(可使用定时任务) 秒杀商品无非就是那几步(前面还可能会有一些判断,如用户是否登录,一人一单,秒杀时间验证等&#xff0…...

高频golang面试题:简单聊聊内存逃逸?

文章目录 问题怎么答举例 问题 知道golang的内存逃逸吗?什么情况下会发生内存逃逸? 怎么答 golang程序变量会携带有一组校验数据,用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验,它就可以在栈上分配。…...

【2023年数学建模国赛C题解题思路】

第一问 要求分析分析蔬菜各品类及单品销售量的分布规律及相互关系。该问题可以拆分成三个角度进行剖析。 1)各种类蔬菜的销售量分布、蔬菜种类与销售量之间的关系;2)各种类蔬菜的销售量的月份分布、各种类蔬菜销售量与月份之间的相关关系&a…...

Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具,可以去 github 下载最新版:https://github.com/allure-framework/allure2/releases 2、解压到本地 3、配置环境变量 复制路径如:F:\allure-2.13.7\bin 环境变量、Path、添加 F:\a…...

yo!这里是进程控制

目录 前言 进程创建 fork()函数 写时拷贝 进程终止 退出场景 退出方法 进程等待 等待原因 等待方法 1.wait函数 2.waitpid函数 等待结果(status介绍) 进程替换 替换原理 替换函数 进程替换例子 shell简易实现 后记 前言 学习完操作…...

多线程快速入门

线程与进程区别 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里…...

Redis 7 第七讲 哨兵模式(sentinal)架构篇

哨兵模式 哨兵巡查监控后台master主机是否故障,如果出现故障根据投票时自动将某一个从库转换成新的主库,继续对外服务。 作用 1. 监控redis运行状态,包括master和slave 2. 当master down机,能自动将salve切换成新的master 应用场景 主从监控监控主从redis库运行的状态…...

laravel框架系列(一),Dcat Admin 安装

介绍 Laravel 是一个流行的 PHP 开发框架,它提供了一套简洁、优雅的语法和丰富的功能,用于快速构建高质量的 Web 应用程序。 以下是 Laravel 的一些主要特点和功能: MVC 架构:Laravel 使用经典的模型-视图-控制器(MV…...

Linux:工具(vim,gcc/g++,make/Makefile,yum,git,gdb)

目录 ---工具功能 1. vim 1.1 vim的模式 1.2 vim常见指令 2. gcc/g 2.1 预备知识 2.2 gcc的使用 3.make,Makefile make.Makefile的使用 4.yum --yum三板斧 5.git --git三板斧 --Linux下提交代码到远程仓库 6.gdb 6.1 gdb的常用指令 学习目标: 1.知道…...

小节1:Python字符串打印

1、字符串拼接 用可以将两个字符串拼接成一个字符串 print("你好 " "这是一串代码") 输出: 2、单双引号转义 当打印的字符串中带有引号或双引号时,使用\或\"表示 print("He said \"Let\s go!\"") 输…...

2023国赛C题解题思路代码及图表:蔬菜类商品的自动定价与补货决策

2023国赛C题:蔬菜类商品的自动定价与补货决策 C题表面上看上去似乎很简单,实际上23题非常的难,编程难度非常的大,第二题它是一个典型的动态规划加仿真题目,我们首先要计算出销量与销售价格,批发价格之间的…...

数据可视化工具中的显眼包:奥威BI自带方案上阵

根据经验来看,BI数据可视化分析项目是由BI数据可视化工具和数据分析方案两大部分共同组成,且大多数时候方案都需从零开始,反复调整,会耗费大量时间精力成本。而奥威BI数据可视化工具别具匠心,将17年经验凝聚成标准化、…...

LeetCode算法心得——生成特殊数字的最少操作(贪心找规律)

大家好,我是晴天学长,这是一个简单贪心思维技巧题,主要考察的还是临场发挥的能力。需要的小伙伴可以关注支持一下哦!后续会继续更新的。 2) .算法思路 0 00 50 25 75 末尾是这两个的才能被45整除 思路:分别找&#x…...

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献 1 题目 1.1 问题背景 多波束测深系统是利用声波在水中的传播特性来测量水体深度的技术,是在单波束测深的基础上发展起来的,该系统在与航迹垂直的平面内一次能发射出数十个乃至上百个…...

如何处理异步编程中的回调地狱问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 解决回调地狱问题的方法⭐使用 Promise⭐使用 async/await⭐ 使用回调函数库⭐模块化⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端…...