消息队列

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

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

消息队列的应用场景:

一对一:

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

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

 

多对一:

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

 

   一种同步消息队列模型

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

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

相关文章
|
1月前
|
消息中间件 存储
消息队列LiteQueue
消息队列LiteQueue
|
7月前
|
消息中间件 存储 数据可视化
消息队列使用的四种场景介绍(一)
消息队列使用的四种场景介绍
108 0
|
9月前
|
消息中间件 Kafka Apache
浅谈消息队列
消息队列的应用场景十分广泛,目前不少公司都在使用,主流的消息中间件有ActiveMQ,RabbitMQ,RocketMQ,ZeroMQ,Kafka等,ActiveMQ是最老牌的MQ,它是Apache的开源项目。
60 0
|
消息中间件 负载均衡 Java
什么是优秀的消息队列
简述消息队列,优秀的消息队列的特质及RoketMQ
|
消息中间件 存储 容灾
优秀的消息队列
优秀的消息队列
53 1
|
消息中间件 存储 缓存
关于消息队列的那些事
关于消息队列的那些事
|
消息中间件 存储 缓存
消息队列(三)
消息队列(三)
107 0
消息队列(三)
|
消息中间件 存储 中间件
消息队列(四)
消息队列(四)
180 0
消息队列(四)
|
消息中间件 存储 缓存
消息队列(六)
消息队列(六)
218 0
消息队列(六)
|
消息中间件 存储 运维
消息队列浅析
消息队列在大型分布式应用中非常常见,目前还停留在能熟练使用基础功能的阶段,对其高级功能以及背后的原理了解甚少,比如事务消息、有序消息等。 学习之前需要先带着几个问题,为什么会诞生消息队列?消息队列的原理是什么?使用消息队列需要注意什么?
201 0

热门文章

最新文章