[发明专利]一种消息的读写方法和装置有效
申请号: | 200710304415.8 | 申请日: | 2007-12-27 |
公开(公告)号: | CN101470636A | 公开(公告)日: | 2009-07-01 |
发明(设计)人: | 朱律玮;任宇;马新群;邹强 | 申请(专利权)人: | 北京东方通科技发展有限责任公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 北京路浩知识产权代理有限公司 | 代理人: | 刘长威 |
地址: | 100080北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 消息 读写 方法 装置 | ||
技术领域
本发明涉及计算机技术领域,特别是涉及一种消息的读写方法和装置。
背景技术
通过消息队列进行数据传输是UNIX操作系统的IPC(InterProcess Communication,进程间通讯)的基本方法之一,被广泛地使用于分布式应用程序间的数据交换。应用程序通过调用系统提供的API(Application Programming Interface,应用程序接口)函数访问目标消息队列,读取或写入数据。根据调用函数的不同,应用程序可以分为两种,消息的生产者和消费者,消息的生产者和消费者通过指定所发或所收消息的类型来建立联系。每一条消息在消息队列中都是唯一的,只能被一个生产者发送后进入队列,被一个消费者接收后取出队列。
任何一个消息队列都支持多个应用进程或线程同时对其访问,消息队列系统提供互斥处理机制,可以保证各个应用进程或线程的安全访问,不会出现冲突。其中,多个应用进程或线程可以处理不同类型的消息。例如,A进程发送X类型的消息,B进程发送Y类型的消息,C进程接收X类型的消息,D进程接收Y类型的消息,因此进程A、C和B、D分别配对,而彼此间没有影响。另外,多个应用进程或线程也可以处理相同类型的消息。例如,A进程发送X类型的消息,B、C、D进程都接收X类型的消息,当有一条X类型的消息到达队列时,B、C、D其中的一个可以收到这条消息,其他进程则处于等待状态。
消息队列支持两种使用模式,一种使用模式为:首先,消息的生产者产生某种类型的消息,并将该消息放入消息队列;然后,消息的消费者从消息队列中接收该类型的消息。如果有多个消息的消费者,则消费者按照调用的先后顺序从队列中接收消息,直到队列中该类型的消息为空。另一种使用模式为:如果消息队列中某种类型的消息为空,则消息的消费者调用接收函数,处于等待状态;当消息的生产者产生该类型的消息并将该消息放入消息队列时,消息的消费者就可以立即取得该消息。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:当消息队列中的某一类型的消息为空,且同时有大量消息的消费者处于等待状态时,该些消费者不占用CPU时间;而当消息的生产者产生某种类型的消息并将该消息放入消息队列时,所有处于等待状态的消费者都被唤醒,而无论该消费者是否需要接收该种类型的消息。被唤醒的消费者会在消息队列中对需要的消息进行查询,其中一个消费者收到该消息,而其他消费者会在遍历所有的消息后再次进入等待状态。因此,当消息的产生非常频繁时,所有处于等待状态的消费者会被反复唤醒,因此该些消费者会占用大量的CPU时间,产生非常大的无谓的系统开销,消息的并发接收能力急剧下降。当硬件系统采用多CPU结构时,产生的问题更加明显。
发明内容
本发明实施例要解决的问题是提供一种消息的读写方法和装置,以克服现有技术中由于消费者被无谓唤醒而造成占用大量CPU时间的缺陷。
为达到上述目的,本发明实施例的技术方案提供一种消息的读写方法,包括以下步骤:将消息从生产者发送到消息队列的步骤;根据所述消息的类型,查询消息同步表,如果所述消息同步表中存在与所述消息的类型对应的记录,则确认有对应的消费者的步骤;当有对应的消费者时,唤醒所述对应的消费者中的一个消费者的步骤;将所述消息发送给所述被唤醒的消费者的步骤。
其中,在所述生产者唤醒对应的消费者中的一个消费者的步骤中,具体包括:获取与所述消息的类型对应的记录的下标;如果所述记录的等待消费者的数量大于0,则获取与所述下标对应的消息同步信号灯,对所述消息同步信号灯进行V操作,并将所述记录中等待消费者的数量减1。
其中,在所述生产者查询消息同步表之前,还包括消费者加入等待队列的步骤,该消费者加入等待队列的步骤具体包括:根据需读取消息的类型,查询所述消息同步表,如果所述消息同步表中存在与所述需读取消息的类型对应的记录,则将所述记录中等待消费者的数量加1;获取与所述需读取消息的类型对应的记录的下标;获取与所述下标对应的消息同步信号灯;对所述消息同步信号灯进行P操作。
其中,在所述生产者查询消息同步表之前,还包括消费者建立消息同步表记录并加入等待队列的步骤,该消费者建立消息同步表记录并加入等待队列的步骤具体包括:根据需读取消息的类型,查询所述消息同步表,如果所述消息同步表中没有与所述需读取消息的类型对应的记录,则在所述消息同步表中建立消息同步表记录,并对所述记录进行初始化;获取所述记录的下标;获取与所述下标对应的消息同步信号灯;对所述消息同步信号灯进行P操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京东方通科技发展有限责任公司,未经北京东方通科技发展有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710304415.8/2.html,转载请声明来源钻瓜专利网。