学习同步异步的概念,并了解MQ消息队列

news/2024/11/24 14:07:48/

文章目录

  • 一、 同步和异步
    • 1.1 同步调用
    • 1.2 异步调用
  • 二、MQ
    • 1.1 介绍
    • 1.2 MQ的优点和使用场景

一、 同步和异步

1.1 同步调用

  同步调用是一种程序调用方式,在该调用方式中,调用者发起一个请求,然后一直等待被调用者返回响应结果后再继续执行。在同步调用中,调用者和被调用者之间是一种阻塞的关系,也就是说,在调用者等待被调用者响应的期间,调用者会被暂停,无法继续执行其他操作。


在这里插入图片描述

视频通话基于同步技术

  通常情况下,同步调用是在两个进程或者线程之间进行的。当调用者发起请求时,它会等待被调用者响应,直到收到响应后才会继续执行。这种调用方式比较直观,容易理解和实现,适用于一些简单的应用场景。

同步调用的优点:

  • 调用方式比较简单,易于理解和实现;
  • 响应时间可控,调用者可以通过设置超时时间来控制调用的响应时间;
  • 数据传输比较稳定,可以保证传输的可靠性。

同步调用的缺点:

  • 调用者需要等待被调用者响应,因此会降低系统的并发性和吞吐量;
  • 如果被调用者响应时间过长或者出现异常,调用者会一直处于等待状态,可能会导致系统出现阻塞等问题。

1.2 异步调用

  异步调用是一种程序调用方式,在该调用方式中,调用者发起一个请求后,不需要等待被调用者立即返回响应结果,而是可以继续执行其他操作。当被调用者完成处理后,会通过回调函数或其他方式通知调用者,并返回响应结果。


在这里插入图片描述

打字聊天基于异步技术

  在异步调用中,调用者和被调用者之间不会形成阻塞的关系,调用者可以继续执行其他操作,不需要一直等待被调用者的响应。因此,异步调用方式可以提高系统的并发性和吞吐量,适用于处理复杂、耗时的任务或者需要同时处理多个请求的场景。

  异步调用的处理流程通常分为三步:发起请求、处理请求和处理响应。在发起请求时,调用者将请求发送给被调用者,然后立即返回。在处理请求时,被调用者异步处理请求,并在处理完成后通知调用者。在处理响应时,调用者接收到被调用者的响应后,通过回调函数或其他方式进行处理。

异步调用的优点:

  • 可以提高系统的并发性和吞吐量,可以在处理复杂、耗时的任务时提高系统的性能;
  • 可以提高系统的响应速度,因为调用者不需要等待被调用者的响应,可以继续执行其他操作;
  • 可以提高系统的可扩展性,因为可以通过增加处理请求的节点来提高系统的性能和可用性。

异步调用的缺点:

  • 调用方式比较复杂,需要对多线程编程和异步编程有一定的理解;
  • 可能会出现竞争条件、死锁等问题;
  • 需要考虑消息的可靠性和传输方式等问题。

二、MQ

1.1 介绍

  MQ(Message Queue)消息队列是一种异步通信方式,用于不同应用程序、不同服务之间的消息传递。通过将消息放入队列中,生产者和消费者可以解耦,即生产者不需要等待消费者处理消息,而消费者可以在需要时获取消息。这种模式可以提高系统的可伸缩性和可靠性,同时也可以减少应用程序的耦合度。
在这里插入图片描述

MQ消息队列通常由以下几个部分组成:

  1. 消息队列服务器:消息队列服务器用于存储和分发消息。它可以是单个节点,也可以是集群。
  2. 生产者:生产者将消息发送到消息队列服务器中。
  3. 消费者:消费者从消息队列服务器中获取消息并处理它们。
  4. 消息:消息是生产者和消费者之间传递的数据。消息可以包含任何格式的数据,例如文本、JSON、二进制数据等。

1.2 MQ的优点和使用场景

MQ消息队的优点:

  1. 异步通信:生产者和消费者之间的通信是异步的,不需要等待对方的响应。
  2. 解耦:生产者和消费者之间的解耦可以提高系统的可伸缩性和可靠性,并减少应用程序的耦合度。
  3. 可靠性:消息队列通常提供持久化和备份机制,可以确保消息的可靠传递。
  4. 伸缩性:通过添加更多的消息队列服务器节点来实现水平扩展。
  5. 异构系统集成:MQ消息队列可以用于将不同语言、不同系统之间的数据进行集成。

  使用MQ消息队列的主要原因是解决不同应用程序或不同服务之间的异步通信问题,这些应用程序或服务之间可以是相互独立的、分布式的,甚至可能是不同的组织或公司。

MQ消息队列的使用场景:

  1. 高并发场景:在高并发场景下,如果直接使用同步方式进行通信,可能会导致请求过多,服务过载或者崩溃。MQ消息队列可以实现异步通信,提高系统的并发能力和稳定性。
  2. 异步处理:有些任务需要异步处理,例如异步地发送电子邮件、短信、通知等,这时候可以将任务发送到MQ消息队列中,由后台的消费者来处理。
  3. 高可靠性和持久性:当应用程序或服务之间需要进行可靠的数据传输时,使用MQ消息队列可以提供可靠性和持久性保障,即使在网络或者其他不可预测的情况下,消息也可以被可靠地传递和处理。
  4. 解耦和可扩展性:在复杂的分布式系统中,应用程序或服务之间的紧密耦合会导致系统难以扩展和维护。通过使用MQ消息队列,可以将生产者和消费者解耦,实现分布式系统的可扩展性。
  5. 异构系统集成:在企业级应用系统中,经常需要集成不同的系统,使用MQ消息队列可以实现不同系统之间的异构集成,将各个系统进行解耦,提高系统的可维护性和可扩展性。

http://www.ppmy.cn/news/47245.html

相关文章

《Android性能优化》一次失败的启动速度优化

正文 在优化APP启动之前,我们首先需要知道,APP启动时究竟发生了什么,才能有的放矢的优化。 APP的启动过程 APP的启动过程就是指,在手机屏幕上点击某个APP的图标,到APP的首页显示在用户面前的过程。 一般APP的启动过…

【数据分析之道-NumPy(三)】numpy切片与索引

文章目录 专栏导读1、前言2、NumPy数组切片2.1一维数组切片2.2多维数组切片 3、NumPy数组索引3.1一维数组索引3.2多维数组索引 4、NumPy数组高级索引4.1整数数组索引4.2布尔数组索引4.3数组索引 总结 专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作…

【一】MATLAB基础知识

【一】MATLAB基础知识 1 数值数据类型的分类 整型 无符号整数:无符号8位整数、无符号16位整数、无符号32位整数、 无符号64位整数。 带符号整数:带符号8位整数、带符号16位整数、带符号32位整数、 带符号64位整数。 无符号8位整数数据范围&#xff…

耗时半月,终于把牛客网上的软件测试面试八股文整理成了PDF合集(测试基础+linux+MySQL+接口测试+自动化测试+测试框架+jmeter测试+测试开发)

大家好,最近有不少小伙伴在后台留言,近期的面试越来越难了,要背的八股文越来越多了,考察得越来越细,越来越底层,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些程序员了。 这不&#xf…

软件生存周期

软件生存周期 同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡的许 多阶段,一般称为软件生存周期。把整个软件生存周期划分为若干阶段,每个阶段的任务相对 独立,而且比较简单,便于不同人员…

嵌入式Linux(7):字符设备驱动--申请设备号

文章目录 1、字符设备和杂项设备的区别2、注册字符类设备号的两个办法第一种:静态分配一个设备号第二种:动态分配注销设备号 写代码不带参数测试(动态分配):带参数测试(静态设置): 建…

C/C++编译器内存优化技术:内存优化关注程序对内存的访问和使用,以提高内存访问速度和减少内存占用。

目录标题 引言缓存优化数据局部性 数据对齐:优化数据结构的布局,以提高内存访问速度。内存池:为对象分配使用预先分配的内存池,以减少动态内存分配和释放的开销。垃圾收集优化:针对使用垃圾收集的语言,优化…

jsp有哪些内置对象?作用分别是什么?

JSP(Java Server Pages)中有以下九个内置对象&#xff1a; 1.request: 表示客户端的HTTP请求。可以使用它来获取客户端提交的表单数据、URL参数、HTTP头等信息。 <!DOCTYPE html> <html> <head><title>获取request对象信息</title> </head&…