1 消息队列特点
在当前多数软件系统中,处理传递消息多用消息队列机制,他具有以下优点:
1. 异步通信:消息队列支持异步通信,发送者和接收者之间的解耦程度较高。发送者将消息放入队列后即可继续执行,而不需要等待接收者的响应。这样可以提高系统的吞吐量和处理能力。
2. 可靠性:消息队列通常提供持久化机制,可以在消息发送后将其持久化到磁盘,并在需要时重新加载。这样即使在系统故障或服务不可用的情况下,消息也不会丢失。
3. 缓冲能力:消息队列允许在发送者和接收者之间建立一个缓冲区,即消息队列。这使得发送者和接收者在处理速率不一致的情况下可以进行解耦削峰,缓解系统压力。在发送者消息发送速率慢下来的时候,接收者可以继续处理缓冲区中余下的消息,起到平谷的作用。
4. 异构系统集成:消息队列可以用于将不同平台、不同语言或不同应用程序之间的消息传递进行集成。通过定义统一的消息格式和协议,不同的系统可以相互通信,实现解耦和互操作。
然而,使用消息队列也存在一些不足之处:
1. 复杂性:实现消息队列需要引入额外的组件和架构,增加了系统的复杂性和维护成本。需要确保消息队列的可用性、消息的序列化和反序列化,以及处理消息队列故障等问题。
2. 系统延迟:由于消息队列是一种异步通信机制,消息的发送和接收之间可能存在一定的延迟。这对于某些实时性要求较高的应用来说可能是不可接受的。
3. 系统依赖性:使用消息队列需要依赖消息队列中间件或者第三方库。这增加了系统的依赖性,并可能导致与特定消息队列中间件相关的限制或问题。
综上所述,使用消息队列可以提供异步通信、可靠性、缓冲能力和异构系统集成等优点,但也会增加系统的复杂性、引入延迟并增加系统的依赖性。在使用消息队列时需要根据具体的应用场景权衡利弊并适当选择。
2 消息队列处理性能提升的过程
2.1 初步阶段
以最简单的sleep为例:
使用while(true)+sleep的方法,当消息队列中有数据时根据数据来到的时间次序依次处理,当队列为空时会进行一段时间的休眠,范围是5-100毫秒,在休眠的这段时间将CPU让给其他线程执行,其他线程根据自身情况向消息队列发送消息,存储在缓冲区,等待休眠时间过去,查看队列是否为空,有消息则处理,没有则继续休眠。
这样的处理模式缺点在于消息从发送到处理会经过毫秒数量级的时间,满足不了高性能的要求。
在此基础上,如果去掉消息队列处理时休眠的语句,令其不停的查看消息队列是否存在数据,实测下来速率并没有很明显的提升,因为在