消息队列
来源:互联网 发布:浅析网络舆论监督 编辑:程序博客网 时间:2024/06/05 06:49
消息队列
一个任务运行时的数据和状态怎么告诉其他任务?信号量为任务间同步和互斥提供了提供了高效的方法,但它不能携带更多的任务信息。因而需要使用更高级的通讯方式,即消息队列和管道。这节主要讲消息队列。
消息队列的应用场景:
一对一:
图一 两个任务利用消息通讯
这是一种简单的应用模式。任务1 发送消息到消息队列1 中,任务2 从消息队列中1 接收消息,如果任务2 需要回应消息,就需要再创建一个消息队列2。
多对一:
这种多对一的应用模式类似于“客户——服务器”,任务3 作为服务器,侦听来自其它任务(客户)的请求,根据不同的任务和不同的请求内容单独发回应消息。
一种同步消息队列模型
在已故巨匠Stevens先生中的<<网络编程卷2>>中有记载使用互斥锁和条件变量来解决生产者/消费者的方法,在多线程编程中,我们也常常需要解决这样的生产者消费者问题。在实际项目中,我见到过很多种解决类似问题的同步消息队列,有的复杂而优雅,有得简陋而实用。
对于生产者,如果不考虑内存和队列的大小问题,只需要一直往消息队列里推消息就可以了。而对于消费者就要复杂一点了,在消息队列取空后,消费者可以循环轮询队列,直到取到新的消息,这种方式编码简单,但是费CPU时间片; 更加优雅的方法是当消息队列为空时,将消费者挂起,等到有消息可读时再唤醒。这里引用Stevens先生的方法,使用互斥锁和信号量实现了一个简单的同步消息队列模型。
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- <>消息队列
- 消息队列
- Jenkins邮件通知设置
- My first EJB example
- 使用email-ext替换Jenkins(Hudson)的默认邮件通知
- [HowTo] OpenWRT on x86 PC
- unresolved external symbol __imp__WSAStartup@8 解决方法
- 消息队列
- S3C6410裸机SD卡驱动(SDIO模式)
- DIV+CSS 斜线效果
- win7上安装了ubuntu真机之后,删除ubuntu
- _beginThreadex创建多线程解读
- Android与蓝牙耳机建立连接的分析
- linux 蓝牙驱动代码阅读笔记
- android Service之四:传递复杂数据类型的远程服务
- 临界区线程对象的使用