[發明專利]一種消息的讀寫方法和裝置有效
| 申請號: | 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.szxzyx.cn/pat/books/200710304415.8/2.html,轉載請聲明來源鉆瓜專利網。





