消息队列

简介: 一个任务运行时的数据和状态怎么告诉其他任务?信号量为任务间同步和互斥提供了提供了高效的方法,但它不能携带更多的任务信息。因而需要使用更高级的通讯方式,即消息队列和管道。这节主要讲消息队列。

    一个任务运行时的数据和状态怎么告诉其他任务?信号量为任务间同步和互斥提供了提供了高效的方法,但它不能携带更多的任务信息。因而需要使用更高级的通讯方式,即消息队列和管道。这节主要讲消息队列。

消息队列的应用场景:

一对一:

图一 两个任务利用消息通讯

这是一种简单的应用模式。任务1 发送消息到消息队列1 中,任务2 从消息队列中1 接收消息,如果任务2 需要回应消息,就需要再创建一个消息队列2。

 

多对一:

这种多对一的应用模式类似于“客户——服务器”,任务3 作为服务器,侦听来自其它任务(客户)的请求,根据不同的任务和不同的请求内容单独发回应消息

 

   一种同步消息队列模型

在已故巨匠Stevens先生中的<<网络编程卷2>>中有记载使用互斥锁和条件变量来解决生产者/消费者的方法,在多线程编程中,我们也常常需要解决这样的生产者消费者问题。在实际项目中,我见到过很多种解决类似问题的同步消息队列,有的复杂而优雅,有得简陋而实用。

对于生产者,如果不考虑内存和队列的大小问题,只需要一直往消息队列里推消息就可以了。而对于消费者就要复杂一点了,在消息队列取空后,消费者可以循环轮询队列,直到取到新的消息,这种方式编码简单,但是费CPU时间片; 更加优雅的方法是当消息队列为空时,将消费者挂起,等到有消息可读时再唤醒。这里引用Stevens先生的方法,使用互斥锁和信号量实现了一个简单的同步消息队列模型。

相关文章
|
9月前
|
消息中间件 大数据 Java
什么是消息队列
什么是消息队列
90 0
|
消息中间件 存储 数据可视化
消息队列使用的四种场景介绍(一)
消息队列使用的四种场景介绍
162 0
|
消息中间件 存储 数据库
消息队列有什么用
通过异步处理提高系统性能(减少响应所需时间) 削峰/限流 降低系统耦合性。
106 0
|
消息中间件 Kafka Apache
浅谈消息队列
消息队列的应用场景十分广泛,目前不少公司都在使用,主流的消息中间件有ActiveMQ,RabbitMQ,RocketMQ,ZeroMQ,Kafka等,ActiveMQ是最老牌的MQ,它是Apache的开源项目。
98 0
|
消息中间件 分布式计算 Hadoop
在实际应用中使用消息队列
在实际应用中使用消息队列
122 2
|
消息中间件 前端开发 大数据
一、消息队列
一、消息队列
|
消息中间件 数据库
|
消息中间件 网络协议
消息队列(二)
消息队列(二)
163 0
消息队列(二)
|
消息中间件 存储 中间件
消息队列(四)
消息队列(四)
214 0
消息队列(四)
|
消息中间件 数据库
什么时候需要消息队列
什么时候需要消息队列
224 0