同步和异步消息机制
- 格式:pdf
- 大小:30.20 KB
- 文档页数:1


同步和异步的区别集锦
通俗版:
举个例子:普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
--------------------------------------------------------------------------------------------------------------------
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。
--------------------------------------------------------------------------------------------------------------------
举个例子 打电话时同步 发消息是异步
综述版:
异步通信”是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。
异步通信也可以是以帧作为发送的单位。接收端必须随时做好接收帧的准备。这是,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始。这也称为帧定界。帧定界还包含确定帧的结束位置。这有两种方法。一种是在帧的尾部设有某种特殊的比特组合来标志帧的结束。或者在帧首部中设有帧长度的字段。需要注意的是,在异步发送帧时,并不是说发送端对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,发送端可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的。在一帧中的所有比特是连续发送的。发送端不需要在发送一帧之前和接收端进行协调(不需要先进行比特同步)。 每个字符开始发送的时间可以是任意的t0 0 1 1 0 1 1 0起始位结束位t每个帧开始发送的时间可以是任意的以字符为单位发送以帧为单位发送帧开始帧结束
数据同步方法
数据同步是指将数据从一个源端同步到目标端,以保持数据在两个位置的一致性。以下是几种常见的数据同步方法:
批量同步(Batch Sync):将数据按批次进行同步,通常在固定时间间隔内执行。适用于数据量较大、同步要求不是特别实时的场景。可以通过定时任务或批处理作业来实现。
实时同步(Real-time Sync):实时将数据变动同步到目标端,以实现尽可能的数据一致性。适用于对数据同步实时性要求较高的场景。可以通过触发器、消息队列等机制来实现。
增量同步(Incremental Sync):只同步源端数据的增量变化,减少数据传输量和同步时间。通常通过记录变更日志或使用时间戳方式来实现。适用于数据更新频繁的场景。
双向同步(Bidirectional Sync):在源端和目标端之间进行双向数据同步,保持两者的数据一致性。适用于需要在多个系统之间保持数据同步的场景。可以通过使用冲突检测和解决机制来处理数据冲突。
异步同步(Asynchronous Sync):源端和目标端的数据同步是异步进行的,不需要立即等待同步完成就可以继续其他操作。适用于对同步实时性要求不高的场景,可以提高系统的性能和响应速度。
同步方式选择根据具体的业务需求和系统架构进行权衡。需要考虑数据的大小、更新频率、目标端的可用性和网络状况等因素。
线程间通信的方式
一、概述
线程是操作系统中最小的执行单元,它们能够并发地执行程序。在多线程编程中,线程间通信是非常重要的一个概念。线程间通信是指不同线程之间通过某种方式来交换信息或共享资源的过程。本文将介绍几种常见的线程间通信方式。
二、共享内存
共享内存是一种非常高效的线程间通信方式。它允许多个线程访问同一块内存区域,从而实现数据共享。在使用共享内存时,需要注意以下几点:
1. 确定共享内存的大小和位置。
2. 确保多个进程对共享内存进行互斥访问。
3. 对于复杂数据结构,需要使用锁来保护数据。
三、消息队列
消息队列是一种基于消息传递的通信机制。在使用消息队列时,发送方将消息发送到队列中,接收方从队列中读取消息。消息队列具有以下优点:
1. 可以实现异步通信。
2. 可以避免死锁问题。
3. 可以实现多对多通信。
四、管道
管道是一种半双工的通信机制。它可以用于在父子进程之间或者兄弟进程之间进行通信。在使用管道时,需要注意以下几点:
1. 管道是半双工的,只能实现单向通信。
2. 管道在创建时需要指定缓冲区大小。
3. 管道可以用于进程间通信。
五、信号量
信号量是一种用于控制并发访问的机制。它可以用于多个线程之间的同步和互斥操作。在使用信号量时,需要注意以下几点:
1. 信号量分为二进制信号量和计数器信号量两种类型。
2. 二进制信号量只有两个状态,0和1,用于实现互斥操作。
3. 计数器信号量可以有多个状态,用于实现同步操作。
六、互斥锁
互斥锁是一种常见的线程同步机制。它可以用于保护共享资源不被多个线程同时访问。在使用互斥锁时,需要注意以下几点:
1. 只有拥有锁的线程才能访问共享资源。
2. 多个线程不能同时持有同一个锁。
3. 在使用锁时需要注意死锁问题。
七、条件变量
条件变量是一种常见的线程同步机制。它可以用于等待某个条件满足后再继续执行。在使用条件变量时,需要注意以下几点:
消息队列简介-原理与应⽤
⼀、消息队列概述
消息队列中间件是分布式系统中重要的组件,主要解决应⽤解耦,异步消息,流量削锋等问题,实现⾼性能,⾼可⽤,可伸缩和最终⼀致性
架构。⽬前使⽤较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
典型的:Kafka==》发布订阅系统
参考:
⼆、消息队列应⽤场景
以下介绍消息队列在实际应⽤中常⽤的使⽤场景。异步处理,应⽤解耦,流量削锋和消息通讯四个场景。
2.1异步处理
场景说明:⽤户注册后,需要发注册邮件和注册短信。传统的做法有两种 1.串⾏的⽅式;2.并⾏⽅式a、串⾏⽅式:将注册信息写⼊数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。
b、并⾏⽅式:将注册信息写⼊数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串⾏的差别
是,并⾏的⽅式可以提⾼处理的时间
假设三个业务节点每个使⽤50毫秒钟,不考虑⽹络等其他开销,则串⾏⽅式的时间是150毫秒,并⾏的时间可能是100毫秒。
因为CPU在单位时间内处理的请求数是⼀定的,假设CPU1秒内吞吐量是100次。则串⾏⽅式1秒内CPU可处理的请求量是7次
(1000/150)。并⾏⽅式处理的请求量是10次(1000/100)
⼩结:如以上案例描述,传统的⽅式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢?
引⼊消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:
按照以上约定,⽤户的响应时间相当于是注册信息写⼊数据库的时间,也就是50毫秒。注册邮件,发送短信写⼊消息队列后,直接返回,因
此写⼊消息队列的速度很快,基本可以忽略,因此⽤户的响应时间可能是50毫秒。因此架构改变后,系统的吞吐量提⾼到每秒20 QPS。⽐
串⾏提⾼了3倍,⽐并⾏提⾼了两倍。
2.2应⽤解耦
场景说明:⽤户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调⽤库存系统的接⼝。如下图: