專利名稱:高性能低等待時(shí)間的消息傳送系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域。特別地,本發(fā)明涉及在兩個(gè)或更多個(gè)分布式計(jì)算機(jī)之間進(jìn)行通信的領(lǐng)域。
背景技術(shù):
在計(jì)算中,提供應(yīng)用、軟件的高速操作和Web應(yīng)用的即時(shí)響應(yīng)的最關(guān)鍵因素之一 是消息傳送系統(tǒng)。使用高效的消息傳送系統(tǒng)可顯著提高使用該系統(tǒng)的軟件和應(yīng)用的性能并轉(zhuǎn)而提 高計(jì)算機(jī)的總體性能。消息傳送系統(tǒng)基本上用于與應(yīng)用關(guān)聯(lián)的各個(gè)進(jìn)程以及各個(gè)應(yīng)用的操作間涉及的 進(jìn)程之間的進(jìn)程間通信。消息傳送系統(tǒng)傳輸包含要在進(jìn)程之間交換的數(shù)據(jù)的消息,由此加 速計(jì)算處理。目前使用的各種消息傳送系統(tǒng)具有鎖定的隊(duì)列,所述鎖定的隊(duì)列用于存儲(chǔ)來(lái)自各 個(gè)進(jìn)程的消息,其結(jié)果是具有操作緩慢的缺點(diǎn)。美國(guó)專利第6029205號(hào)披露了各種用于共享存儲(chǔ)器進(jìn)程間通信的系統(tǒng)以及在正 在執(zhí)行的進(jìn)程之間傳遞消息的技術(shù),但是其未克服鎖定隊(duì)列的問(wèn)題。美國(guó)專利申請(qǐng)20050021622披露了一種用于在發(fā)布節(jié)點(diǎn)和訂購(gòu)節(jié)點(diǎn)之間針對(duì)主 題進(jìn)行動(dòng)態(tài)消息路由的系統(tǒng),其包括多個(gè)消息隊(duì)列、至少一個(gè)主題節(jié)點(diǎn)表、訂購(gòu)模塊、發(fā)布 模塊以及其他在一個(gè)或多個(gè)發(fā)布方與一個(gè)或多個(gè)訂購(gòu)方之間發(fā)送消息的模塊。此文檔僅 專注于發(fā)布訂購(gòu)機(jī)制并且在點(diǎn)對(duì)點(diǎn)隊(duì)列的情況下并不適用。此申請(qǐng)也未克服鎖定隊(duì)列的問(wèn) 題。美國(guó)專利第6029205號(hào)披露了一種在正在并行執(zhí)行的協(xié)作的順序進(jìn)程之間進(jìn)行 進(jìn)程間通信的系統(tǒng)和方法,其使用共享存儲(chǔ)器隊(duì)列作為用于消息傳遞和進(jìn)程同步的機(jī)制。 發(fā)送進(jìn)程將消息存儲(chǔ)為隊(duì)列中的新的表項(xiàng)(入隊(duì)操作),所述表項(xiàng)在第一進(jìn)程的虛擬地址 空間中可見(jiàn),并且接收進(jìn)程從隊(duì)列讀取消息并執(zhí)行出隊(duì)操作。但是其并未具體提及/要求 保護(hù)使用共享存儲(chǔ)器隊(duì)列達(dá)到低等待時(shí)間。因此,需要一種系統(tǒng)和方法,它 使得多個(gè)進(jìn)程能夠同時(shí)通信; 提高消息傳送系統(tǒng)的吞吐量; 易于部署在現(xiàn)有系統(tǒng)上; 需要最低程度的基礎(chǔ)設(shè)施;以及 為關(guān)鍵應(yīng)用提供高效的消息傳遞技術(shù)。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)目標(biāo)是提供一種高效的消息傳送系統(tǒng)并由此減小計(jì)算時(shí)間。本發(fā)明的另一個(gè)目標(biāo)是提供一種成本高效的消息傳送系統(tǒng)。
4
本發(fā)明的另一個(gè)目標(biāo)是提供一種使得多個(gè)進(jìn)程能夠同時(shí)通信的系統(tǒng)。本發(fā)明的另一個(gè)目標(biāo)是提供一種提供高吞吐量和低等待時(shí)間的系統(tǒng)。本發(fā)明的另一個(gè)目標(biāo)是提供一種可以容易地與現(xiàn)有系統(tǒng)部署在一起的系統(tǒng)。本發(fā)明的另一個(gè)目標(biāo)是提供一種需要最低程度的基礎(chǔ)設(shè)施的系統(tǒng)。本發(fā)明的另一個(gè)目標(biāo)是提供一種用于關(guān)鍵應(yīng)用的高效消息傳遞技術(shù)。進(jìn)而,本發(fā)明的一個(gè)目標(biāo)是還可在具有較差存儲(chǔ)器一致性模型的硬件和軟件基礎(chǔ) 設(shè)施上使用。本發(fā)明構(gòu)想了一種用于在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少兩個(gè)進(jìn)程之間的進(jìn)程間通 信中進(jìn)行消息傳送的系統(tǒng),所述系統(tǒng)包括 儲(chǔ)存設(shè)備,適于存儲(chǔ)進(jìn)程間消息; 儲(chǔ)存緩沖區(qū)隊(duì)列,所述儲(chǔ)存緩沖區(qū)在所述儲(chǔ)存設(shè)備中的可由多個(gè)進(jìn)程并行訪問(wèn) 的共享存儲(chǔ)器內(nèi); 空閑指向單元,與適于指向所述隊(duì)列中的空閑儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān)聯(lián); 至少一個(gè)數(shù)據(jù)指向單元,與適于指向包含進(jìn)程間消息的儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān) 聯(lián);以及 消息讀/寫(xiě)裝置,適于在不鎖定所述隊(duì)列的情況下,通過(guò)允許進(jìn)程將消息插入 由所述空閑指向單元所指向的所述空閑儲(chǔ)存緩沖區(qū),以及允許至少一個(gè)進(jìn)程讀取存儲(chǔ)在包 含由所述數(shù)據(jù)指向單元所指向的進(jìn)程間消息的儲(chǔ)存緩沖區(qū)內(nèi)的已插入消息,同時(shí)從所述隊(duì) 列中的所述儲(chǔ)存緩沖區(qū)插入和取出消息。典型地,所述系統(tǒng)包括更新裝置,適于更新所述空閑指向單元和所述數(shù)據(jù)指向單 元的位置。典型地,所述共享存儲(chǔ)器位于本地節(jié)點(diǎn)或遠(yuǎn)程節(jié)點(diǎn)。此外,所述進(jìn)程可在遠(yuǎn)程節(jié)點(diǎn) 處運(yùn)行,所述遠(yuǎn)程節(jié)點(diǎn)運(yùn)行使用通信裝置進(jìn)行通信的進(jìn)程,所述通信裝置適于促進(jìn)從包括 TCP/IP連接、GPRS連接、WiFi連接、WiMax連接以及EDGE連接的組選擇的連接。所述讀/寫(xiě)裝置包括檢查裝置,所述檢查裝置針對(duì)寫(xiě)入/插入操作檢查所述隊(duì)列 是否已滿并且針對(duì)讀取/取出操作檢查所述隊(duì)列是否為空。根據(jù)本發(fā)明的優(yōu)選實(shí)施例,所述隊(duì)列包含在文件中。優(yōu)選地,所述文件被映射到處理器的主存儲(chǔ)器空間內(nèi)。再次地,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,隊(duì)列中的每一個(gè)儲(chǔ)存緩沖區(qū)都被鏈接到下一 儲(chǔ)存緩沖區(qū)并且最后一個(gè)儲(chǔ)存緩沖區(qū)被鏈接到第一個(gè)儲(chǔ)存緩沖區(qū),由此形成循環(huán)鏈接的序 列以便將所有入站消息一個(gè)接一個(gè)地存儲(chǔ)在所述儲(chǔ)存緩沖區(qū)中。此系統(tǒng)優(yōu)選地是金融交易系統(tǒng),但是也可以用于許多其他應(yīng)用。根據(jù)本發(fā)明的另一方面,提供了一種用于在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少兩個(gè)進(jìn)程 之間的進(jìn)程間通信中進(jìn)行消息傳送的方法,所述方法包括以下步驟 提供儲(chǔ)存設(shè)備以存儲(chǔ)進(jìn)程間消息; 提供在所述儲(chǔ)存設(shè)備中的共享存儲(chǔ)器內(nèi)的至少一個(gè)儲(chǔ)存緩沖區(qū)隊(duì)列; 提供空閑指向單元,其與指向所述隊(duì)列中的空閑儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān)聯(lián); 提供至少一個(gè)數(shù)據(jù)指向單元,其與指向包含所述進(jìn)程間消息的儲(chǔ)存緩沖區(qū)的進(jìn) 程關(guān)聯(lián);
從在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少一個(gè)進(jìn)程接收至少一個(gè)進(jìn)程間消息; 將所接收的進(jìn)程間消息插入所述隊(duì)列的由所述空閑指向單元所指向的儲(chǔ)存緩 沖區(qū); 將空閑指向單元的位置更新為所述隊(duì)列的下一空閑儲(chǔ)存緩沖區(qū)以容納下一進(jìn) 程間消息; 由多個(gè)進(jìn)程從所述隊(duì)列的由所述多個(gè)進(jìn)程的相應(yīng)數(shù)據(jù)指向單元所指向的儲(chǔ)存 緩沖區(qū)同時(shí)取出進(jìn)程間消息;以及 將所述數(shù)據(jù)指向單元的位置更新為包含將由任一所述進(jìn)程讀取的消息的下一 儲(chǔ)存緩沖區(qū)。典型地,更新空閑指向單元的位置的步驟包括以下步驟檢查所述空閑指向單元 是否指向由任一數(shù)據(jù)指向單元所指向的緩沖區(qū),如果是,則等待該緩沖區(qū)變?yōu)榭臻e,否則, 將空閑指向單元的指針位置更新為下一空閑儲(chǔ)存緩沖區(qū)。并且取出進(jìn)程間消息的步驟包括 以下步驟檢查所述數(shù)據(jù)指向單元是否指向由所述空閑指向單元所指向的緩沖區(qū),如果是, 則等待將數(shù)據(jù)插入該隊(duì)列以便取出。典型地,插入所接收的進(jìn)程間消息的步驟包括以下步驟將所插入的消息復(fù)制到 所述節(jié)點(diǎn)的主存儲(chǔ)器以便永久/二次存儲(chǔ)。
現(xiàn)在將參考
本發(fā)明,這些附圖是圖1示出了用于在進(jìn)程間通信中進(jìn)行無(wú)鎖消息傳送(locklessmessaging)的系 統(tǒng);圖2示出了是一系列循環(huán)鏈接的存儲(chǔ)單元的隊(duì)列的詳細(xì)視圖;以及圖3示出了用于在進(jìn)程間通信中進(jìn)行無(wú)鎖消息傳送的方法。
具體實(shí)施例方式現(xiàn)有技術(shù)未提供任何在具有較差存儲(chǔ)器一致性模型的平臺(tái)上進(jìn)行進(jìn)程間消息的 無(wú)鎖消息傳遞的系統(tǒng)和方法。因此,本發(fā)明提供了一種即使在具有較差存儲(chǔ)器一致性模型 的平臺(tái)上也可在進(jìn)程間通信中進(jìn)行無(wú)鎖消息傳遞的高效系統(tǒng)和方法。本發(fā)明構(gòu)想的消息傳送系統(tǒng)在同一服務(wù)器(本地消息傳送)的進(jìn)程之間以及在不 同服務(wù)器(遠(yuǎn)程服務(wù)器)上的進(jìn)程之間實(shí)現(xiàn)高效的進(jìn)程間通信。根據(jù)本發(fā)明的實(shí)施例,用于進(jìn)程間通信的消息傳送系統(tǒng)在文件中實(shí)現(xiàn)。這些文件 包含消息隊(duì)列,即,存儲(chǔ)進(jìn)程間消息的數(shù)據(jù)結(jié)構(gòu)。這些文件被映射到處理器的主存儲(chǔ)器空間 以便加速訪問(wèn)。所述隊(duì)列包括儲(chǔ)存緩沖區(qū),并且每一個(gè)儲(chǔ)存緩沖區(qū)都被鏈接到下一儲(chǔ)存緩沖區(qū)并 且最后一個(gè)儲(chǔ)存緩沖區(qū)被鏈接到第一個(gè)儲(chǔ)存緩沖區(qū),由此形成循環(huán)鏈接的序列以便將所有 入站消息一個(gè)接一個(gè)地存儲(chǔ)在所述儲(chǔ)存緩沖區(qū)中。此外,所述隊(duì)列具有兩種類型的指向單 元,即空閑指向單元和數(shù)據(jù)指向單元。所述隊(duì)列具有空閑指向單元,所述空閑指向單元始終指向其中可存儲(chǔ)下一入站消 息的空閑儲(chǔ)存緩沖區(qū)并且始終與正在寫(xiě)入所述隊(duì)列的進(jìn)程關(guān)聯(lián)。
所述隊(duì)列具有至少一個(gè)數(shù)據(jù)指向單元,所述數(shù)據(jù)指向單元始終指向可從其讀取預(yù) 先存儲(chǔ)的消息的下一儲(chǔ)存緩沖區(qū)并且始終與打算從所述隊(duì)列進(jìn)行讀取的進(jìn)程關(guān)聯(lián)。在多個(gè) 進(jìn)程從同一隊(duì)列讀取的情況下,可以針對(duì)從所述隊(duì)列讀取消息而采用多個(gè)數(shù)據(jù)指向單元, 其中每個(gè)數(shù)據(jù)指向單元都與一個(gè)讀取進(jìn)程關(guān)聯(lián)。此外,空閑末端指向單元以及一個(gè)或多個(gè)數(shù)據(jù)指向單元的位置用于檢查隊(duì)列是否 為空以及隊(duì)列是否已滿空即任一儲(chǔ)存緩沖區(qū)都未存儲(chǔ)消息,滿即隊(duì)列的所有儲(chǔ)存緩沖區(qū)中 都已存儲(chǔ)將由一個(gè)或多個(gè)進(jìn)程讀取的消息。在隊(duì)列只有一個(gè)數(shù)據(jù)指向單元(即,隊(duì)列是僅與一個(gè)讀取和一個(gè)寫(xiě)入進(jìn)程關(guān)聯(lián)的 點(diǎn)到點(diǎn)隊(duì)列)的情況下,將檢查隊(duì)列是已滿還是為空,方式為確定空閑指向單元和數(shù)據(jù)指 向單元的位置并遵循以下所述的過(guò)程 如果數(shù)據(jù)指向單元和空閑指向單元指向同一儲(chǔ)存緩沖區(qū),則隊(duì)列為空。 如果空閑指向單元所指向的儲(chǔ)存緩沖區(qū)使得其下一緩沖區(qū)被數(shù)據(jù)錨(Data Anchor)指向,則隊(duì)列已滿。在此情況下,空閑指針?biāo)赶虻墓?jié)點(diǎn)是下一可用節(jié)點(diǎn)。在隊(duì)列具有多個(gè)數(shù)據(jù)指向單元的情況下,即所述隊(duì)列是與若干從同一隊(duì)列讀取消 息的讀取方進(jìn)程關(guān)聯(lián)的發(fā)布訂購(gòu)隊(duì)列(publish subscribequeue),并且每一個(gè)進(jìn)程都具有 單獨(dú)的數(shù)據(jù)指向單元,并且在任一時(shí)刻,只有一個(gè)進(jìn)程可以通過(guò)將自身與空閑指向單元關(guān) 聯(lián)來(lái)寫(xiě)入隊(duì)列。檢查此類隊(duì)列是已滿還是為空,方式為確定空閑指向單元和所有數(shù)據(jù)指向 單元的位置并遵循以下所述的過(guò)程 如果所有數(shù)據(jù)指向單元和空閑指向單元都指向同一儲(chǔ)存緩沖區(qū),則隊(duì)列為空。 如果空閑指向單元所指向的儲(chǔ)存緩沖區(qū)使得其下一緩沖區(qū)被任一數(shù)據(jù)指向單 元指向,則隊(duì)列已滿。在此情況下,空閑指針?biāo)赶虻墓?jié)點(diǎn)是下一可用節(jié)點(diǎn)。根據(jù)本發(fā)明,存儲(chǔ)器映射的文件可被存儲(chǔ)在本地機(jī)器,即運(yùn)行多個(gè)進(jìn)程的節(jié)點(diǎn)或 獨(dú)立計(jì)算機(jī)中,本地機(jī)器也在文件中采用消息隊(duì)列并將文件映射到處理器的主存儲(chǔ)器中, 以便促進(jìn)在同一獨(dú)立計(jì)算機(jī)上運(yùn)行的進(jìn)程之間的進(jìn)程間通信,方式為在任何兩個(gè)進(jìn)程之 間使用點(diǎn)到點(diǎn)隊(duì)列,或使用其中一個(gè)或多個(gè)進(jìn)程從單個(gè)隊(duì)列讀取消息的發(fā)布訂購(gòu)隊(duì)列。此外,根據(jù)本發(fā)明,單獨(dú)的存儲(chǔ)器映射的文件可被存儲(chǔ)在遠(yuǎn)程機(jī)器,S卩,可通信地 彼此耦合以形成網(wǎng)絡(luò)的遠(yuǎn)程存在的節(jié)點(diǎn)中的任何節(jié)點(diǎn),以便促進(jìn)在遠(yuǎn)程節(jié)點(diǎn)上運(yùn)行的進(jìn)程 之間的進(jìn)程間通信,方式為在遠(yuǎn)程節(jié)點(diǎn)上運(yùn)行的任何兩個(gè)進(jìn)程之間使用點(diǎn)到點(diǎn)隊(duì)列,或使 用其中在遠(yuǎn)程節(jié)點(diǎn)上運(yùn)行的一個(gè)或多個(gè)進(jìn)程從單個(gè)隊(duì)列讀取消息的發(fā)布訂購(gòu)隊(duì)列。在上述情況下,在網(wǎng)絡(luò)的某一節(jié)點(diǎn)上運(yùn)行的寫(xiě)入方進(jìn)程將消息存儲(chǔ)在它的映射了 消息隊(duì)列文件的共享存儲(chǔ)器中的消息隊(duì)列內(nèi),進(jìn)而,此消息被中間發(fā)送方進(jìn)程讀取,中間發(fā) 送方進(jìn)程然后將此消息通過(guò)網(wǎng)絡(luò)發(fā)送到運(yùn)行另一中間接收方進(jìn)程的第二節(jié)點(diǎn),所述另一中 間接收方進(jìn)程讀取消息并將其存儲(chǔ)在映射到此節(jié)點(diǎn)的共享存儲(chǔ)器的消息隊(duì)列中,以供實(shí)際 讀取進(jìn)程來(lái)讀取。根據(jù)本發(fā)明,可以在沒(méi)有任何類型的鎖定的情況下同時(shí)將消息寫(xiě)入隊(duì)列并從隊(duì)列 讀取消息。如現(xiàn)有技術(shù)中所述,寫(xiě)入方進(jìn)程在對(duì)隊(duì)列的寫(xiě)入操作期間將鎖定隊(duì)列,使得直到 寫(xiě)入操作結(jié)束,其他進(jìn)程才能進(jìn)行讀?。徊⑶易x取方進(jìn)程在對(duì)隊(duì)列的讀取操作期間將鎖定 隊(duì)列,使得直到讀取操作結(jié)束,其他進(jìn)程才能寫(xiě)入隊(duì)列,這將導(dǎo)致非常低的吞吐量和較高的等待時(shí)間。連同使用鎖,現(xiàn)有技術(shù)進(jìn)程還在隊(duì)列是空還是滿的條件處暫停。此暫停進(jìn)程和 使進(jìn)程返回執(zhí)行的操作帶來(lái)了大量開(kāi)銷并增大了平均等待時(shí)間。為了消除此開(kāi)銷,本發(fā)明提出了連續(xù)檢查隊(duì)列是空還是滿。這有助于保持非常低 的等待時(shí)間。為了具有此類無(wú)鎖消息傳送系統(tǒng),以下列出了同樣將施加的若干約束 寫(xiě)入方進(jìn)程只能寫(xiě)入隊(duì)列的由空閑指向單元所指向的儲(chǔ)存緩沖區(qū)并且讀取方 進(jìn)程只能讀取由數(shù)據(jù)指向單元所指向的儲(chǔ)存緩沖區(qū)。 處理器或芯片組或操作系統(tǒng)不應(yīng)出于優(yōu)化目的而修改進(jìn)程的指令的順序,這會(huì) 導(dǎo)致降低的吞吐量。 只有在進(jìn)程已讀取或?qū)懭腙?duì)列之后才能進(jìn)行空閑指向單元和數(shù)據(jù)指向單元的更新。 使用指令和編譯器命令(例如,易失關(guān)鍵字(volatile key),存儲(chǔ)器屏障指令) 確保消息排隊(duì)在具有較差存儲(chǔ)器一致性的硬件_軟件平臺(tái)中正確工作。根據(jù)本發(fā)明的優(yōu)選實(shí)施例,可以有利地采用消息傳送系統(tǒng)以便以非常高的速度和 降低的本地和遠(yuǎn)程進(jìn)程間通信等待時(shí)間來(lái)促進(jìn)交易人、經(jīng)紀(jì)人、公司和機(jī)構(gòu)的跨洲的資產(chǎn) 金融交易。參考圖1,示出了用于在至少兩個(gè)進(jìn)程之間的進(jìn)程間通信中進(jìn)行無(wú)鎖消息傳送的 系統(tǒng)。所述進(jìn)程可在一個(gè)獨(dú)立的節(jié)點(diǎn)處運(yùn)行,或在網(wǎng)絡(luò)中可通信地彼此耦合的不同節(jié)點(diǎn)上 運(yùn)行。節(jié)點(diǎn)A中的數(shù)字100表示儲(chǔ)存設(shè)備,其維護(hù)儲(chǔ)存緩沖區(qū)104的隊(duì)列102,后者存儲(chǔ) 要從一個(gè)進(jìn)程傳輸?shù)搅硪粋€(gè)進(jìn)程的進(jìn)程間消息。如圖2所示,根據(jù)本發(fā)明的優(yōu)選實(shí)施例的隊(duì)列是一系列循環(huán)鏈接的儲(chǔ)存緩沖區(qū), 即,每一個(gè)儲(chǔ)存緩沖區(qū)都指向系列中的下一儲(chǔ)存緩沖區(qū)并且最后一個(gè)儲(chǔ)存緩沖區(qū)指向第一 個(gè)儲(chǔ)存緩沖區(qū)以形成循環(huán)。隊(duì)列102可以是不同的點(diǎn)到點(diǎn)隊(duì)列或發(fā)布訂購(gòu)隊(duì)列,從中多個(gè)讀取方進(jìn)程可使用 它們的進(jìn)程特定的數(shù)據(jù)指向單元來(lái)讀取消息。在讀取方和寫(xiě)入方進(jìn)程都在同一節(jié)點(diǎn)上運(yùn)行的本地進(jìn)程間通信的情況下,寫(xiě)入方 進(jìn)程將消息輸入隊(duì)列12的由空閑指向單元106所指向的儲(chǔ)存緩沖區(qū)104。在寫(xiě)入儲(chǔ)存緩沖 區(qū)104之后,更新空閑指向單元106的位置,并且其指向隊(duì)列的其中可寫(xiě)入另一消息的下一 空閑儲(chǔ)存緩沖區(qū)104。進(jìn)而,如果隊(duì)列為點(diǎn)到點(diǎn)類型,與該隊(duì)列關(guān)聯(lián)的兩個(gè)進(jìn)程中的任一進(jìn)程都可在當(dāng) 前由空閑指向單元106所指向的儲(chǔ)存緩沖區(qū)104中寫(xiě)入消息,并且對(duì)于發(fā)布訂購(gòu)隊(duì)列,任何 通過(guò)隊(duì)列傳輸消息的進(jìn)程都可寫(xiě)入當(dāng)前由空閑指向單元106所指向的儲(chǔ)存緩沖區(qū)104。讀取方進(jìn)程讀取在隊(duì)列102的由數(shù)據(jù)指向單元所指向的儲(chǔ)存緩沖區(qū)104中存儲(chǔ)的 消息。一旦消息被存儲(chǔ)在儲(chǔ)存緩沖區(qū)104中,讀取方進(jìn)程就讀取該儲(chǔ)存緩沖區(qū)。相應(yīng)地,更 新數(shù)據(jù)指向單元的位置以指向包含要讀取的下一消息的下一儲(chǔ)存緩沖區(qū)104。在點(diǎn)到點(diǎn)隊(duì)列的情況下,兩個(gè)關(guān)聯(lián)進(jìn)程中的任一進(jìn)程都可讀取該隊(duì)列的由數(shù)據(jù)指 向單元108所指向的儲(chǔ)存緩沖區(qū)104中存儲(chǔ)的消息,并且在發(fā)布訂購(gòu)消息傳送的情況下,通 過(guò)該隊(duì)列傳送消息的進(jìn)程中的任一進(jìn)程都可讀取消息。此處的不同在于每一個(gè)進(jìn)程都將具有單獨(dú)的數(shù)據(jù)指向單元,任何希望讀取消息的進(jìn)程都將讀取由其自己的數(shù)據(jù)指向單元108 所指向的消息。圖1還示出了在網(wǎng)絡(luò)中連接的兩個(gè)節(jié)點(diǎn),即節(jié)點(diǎn)A和節(jié)點(diǎn)B,它們可以運(yùn)行彼此交 互的不同讀取和寫(xiě)入進(jìn)程。以相同的方式,使用TCP/IP連接或任何其他適合的連接使多個(gè) 節(jié)點(diǎn)彼此互連,以便使用本發(fā)明構(gòu)想的系統(tǒng)和方法運(yùn)行多個(gè)進(jìn)程以進(jìn)行進(jìn)程間通信也在本 發(fā)明的范圍之內(nèi)。參考圖3,示出了一種用于在至少兩個(gè)進(jìn)程之間的進(jìn)程間通信中進(jìn)行無(wú)鎖消息傳 送的方法,所述方法包括以下步驟 提供儲(chǔ)存設(shè)備以存儲(chǔ)進(jìn)程間消息,1001 ; 提供在所述儲(chǔ)存設(shè)備中的共享存儲(chǔ)器內(nèi)的儲(chǔ)存緩沖區(qū)隊(duì)列,1003 ; 提供空閑指向單元,其與指向所述隊(duì)列中的空閑儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān)聯(lián), 1005 ; 提供至少一個(gè)數(shù)據(jù)指向單元,其與指向包含所述進(jìn)程間消息的儲(chǔ)存緩沖區(qū)的進(jìn) 程關(guān)聯(lián),1007 ; 從在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少一個(gè)進(jìn)程接收至少一個(gè)進(jìn)程間消息,1009 ; 將所接收的進(jìn)程間消息插入所述隊(duì)列的由所述空閑指向單元所指向的儲(chǔ)存緩 沖區(qū),1011 ; 將空閑指向單元的位置更新為所述隊(duì)列的下一空閑儲(chǔ)存緩沖區(qū)以容納下一進(jìn) 程間消息,1013 ; 由多個(gè)進(jìn)程從所述隊(duì)列的由所述多個(gè)進(jìn)程的相應(yīng)數(shù)據(jù)指向單元所指向的儲(chǔ)存 緩沖區(qū)同時(shí)取出進(jìn)程間消息,1015 ;以及 將所述數(shù)據(jù)指向單元的位置更新為包含將由任一所述進(jìn)程讀取的消息的下一 儲(chǔ)存緩沖區(qū),1017。此外,以預(yù)定順序使用指令和編譯器命令,例如易失關(guān)鍵字和存儲(chǔ)器屏障指令,以 確保在將所接收的進(jìn)程間消息插入所述隊(duì)列的由所述空閑指向單元所指向的儲(chǔ)存緩沖區(qū) 的步驟之后,將儲(chǔ)存緩沖區(qū)的內(nèi)容從高速緩存清倉(cāng)(flush)到主存儲(chǔ)器(RAM)。技術(shù)進(jìn)步本發(fā)明的技術(shù)進(jìn)步包括提供了 一種減少計(jì)算時(shí)間的高效消息傳送系統(tǒng)。 一種成本高效的消息傳送系統(tǒng)。 一種使得多個(gè)進(jìn)程能夠同時(shí)通信的系統(tǒng)。 一種提供高吞吐量和低等待時(shí)間的系統(tǒng)。 一種易于與現(xiàn)有系統(tǒng)一起部署的系統(tǒng)。 一種需要最低程度的基礎(chǔ)設(shè)施的系統(tǒng)。 一種用于關(guān)鍵應(yīng)用的高效消息傳遞技術(shù)。雖然在此相當(dāng)多地強(qiáng)調(diào)了優(yōu)選實(shí)施例的組件和組件部分,但是將理解的是,可以構(gòu) 想許多實(shí)施例并且可以在優(yōu)選實(shí)施例中做出許多更改而不偏離本發(fā)明的原理。根據(jù)此處的披 露,優(yōu)選實(shí)施例中的這些和其他更改以及本發(fā)明的其他實(shí)施例將對(duì)本領(lǐng)域的技術(shù)人員顯而易 見(jiàn),由此將明確理解的是,上述描述性內(nèi)容應(yīng)被解釋為只是例示本發(fā)明而非限制本發(fā)明。
9
權(quán)利要求
一種用于在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少兩個(gè)進(jìn)程之間的進(jìn)程間通信中進(jìn)行消息傳送的系統(tǒng),所述系統(tǒng)包括儲(chǔ)存設(shè)備,適于存儲(chǔ)進(jìn)程間消息;儲(chǔ)存緩沖區(qū)隊(duì)列,所述儲(chǔ)存緩沖區(qū)在所述儲(chǔ)存設(shè)備中的可由多個(gè)進(jìn)程并行訪問(wèn)的共享存儲(chǔ)器內(nèi);空閑指向單元,與適于指向所述隊(duì)列中的空閑儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān)聯(lián);至少一個(gè)數(shù)據(jù)指向單元,與適于指向包含進(jìn)程間消息的儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān)聯(lián);以及消息讀/寫(xiě)裝置,適于在不鎖定所述隊(duì)列的情況下,通過(guò)允許進(jìn)程將消息插入由所述空閑指向單元所指向的所述空閑儲(chǔ)存緩沖區(qū)以及允許至少一個(gè)進(jìn)程讀取存儲(chǔ)在包含由所述數(shù)據(jù)指向單元所指向的進(jìn)程間消息的儲(chǔ)存緩沖區(qū)內(nèi)的已插入消息,同時(shí)從所述隊(duì)列中的所述儲(chǔ)存緩沖區(qū)插入和取出消息。
2.如權(quán)利要求1所述的系統(tǒng),所述系統(tǒng)包括更新裝置,適于更新所述空閑指向單元和 所述數(shù)據(jù)指向單元的位置。
3 如權(quán)利要求1所述的系統(tǒng),其中所述共享存儲(chǔ)器位于本地節(jié)點(diǎn)。
4.如權(quán)利要求1所述的系統(tǒng),其中所述共享存儲(chǔ)器位于遠(yuǎn)程節(jié)點(diǎn)。
5.如權(quán)利要求1所述的系統(tǒng),其中所述隊(duì)列包含一系列循環(huán)鏈接的儲(chǔ)存緩沖區(qū)。
6.如權(quán)利要求1所述的系統(tǒng),其中遠(yuǎn)程節(jié)點(diǎn)適于運(yùn)行使用通信裝置進(jìn)行通信的進(jìn)程, 所述通信裝置適于促進(jìn)從包括TCP/IP連接、GPRS連接、WiFi連接、WiMax連接以及EDGE連 接的組中選擇的連接。
7.如權(quán)利要求1所述的系統(tǒng),其中所述讀/寫(xiě)裝置包括檢查裝置,所述檢查裝置針對(duì)寫(xiě) 入/插入操作檢查所述隊(duì)列是否已滿并且針對(duì)讀取/取出操作檢查所述隊(duì)列是否為空。
8.如權(quán)利要求1所述的系統(tǒng),其中所述隊(duì)列包含在文件中。
9.如權(quán)利要求1所述的系統(tǒng),其中所述隊(duì)列包含在映射到處理器的主存儲(chǔ)器空間內(nèi)的 文件中。
10.如權(quán)利要求1所述的系統(tǒng),其中隊(duì)列中的每一個(gè)儲(chǔ)存緩沖區(qū)都被鏈接到下一儲(chǔ)存 緩沖區(qū)并且最后一個(gè)儲(chǔ)存緩沖區(qū)被鏈接到第一個(gè)儲(chǔ)存緩沖區(qū),由此形成循環(huán)鏈接的序列以 便將所有入站消息一個(gè)接一個(gè)地存儲(chǔ)在所述儲(chǔ)存緩沖區(qū)中。
11.如所有上述權(quán)利要求中的任一權(quán)利要求所述的系統(tǒng),其中所述系統(tǒng)適于與金融交易應(yīng)用一起使用。
12.一種用于在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少兩個(gè)進(jìn)程之間的進(jìn)程間通信中進(jìn)行無(wú)鎖消 息傳送的方法,所述方法包括以下步驟提供儲(chǔ)存設(shè)備以儲(chǔ)存進(jìn)程間消息; 在所述儲(chǔ)存設(shè)備中的共享存儲(chǔ)器內(nèi)提供儲(chǔ)存緩沖區(qū)隊(duì)列;提供空閑指向單元,該空閑指向單元與指向所述隊(duì)列中的空閑儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān)聯(lián);提供至少一個(gè)數(shù)據(jù)指向單元,該至少一個(gè)數(shù)據(jù)指向單元與指向包含所述進(jìn)程間消息的 儲(chǔ)存緩沖區(qū)的進(jìn)程關(guān)聯(lián);從在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少一個(gè)進(jìn)程接收至少一個(gè)進(jìn)程間消息; 將所接收的進(jìn)程間消息插入所述隊(duì)列的由所述空閑指向單元所指向的儲(chǔ)存緩沖區(qū);將空閑指向單元的位置更新為所述隊(duì)列的下一空閑儲(chǔ)存緩沖區(qū)以容納下一進(jìn)程間消息;由多個(gè)進(jìn)程從所述隊(duì)列的由所述多個(gè)進(jìn)程的相應(yīng)數(shù)據(jù)指向單元所指向的儲(chǔ)存緩沖區(qū) 同時(shí)取出進(jìn)程間消息;以及將所述數(shù)據(jù)指向單元的位置更新為包含將由所述進(jìn)程的任一讀取的消息的下一儲(chǔ)存 緩沖區(qū)。
13.如權(quán)利要求12所述的方法,其中更新空閑指向單元的位置的步驟包括以下步驟 檢查所述空閑指向單元是否指向由數(shù)據(jù)指向單元所指向的緩沖區(qū),如果是,則等待該緩沖 區(qū)變?yōu)榭臻e,否則,將空閑指向單元的指針位置更新為下一空閑儲(chǔ)存緩沖區(qū)。
14.如權(quán)利要求12所述的方法,其中取出進(jìn)程間消息的步驟包括以下步驟檢查所述 數(shù)據(jù)指向單元是否指向由所述空閑指向單元指向的緩沖區(qū),如果是,則等待將數(shù)據(jù)插入該 隊(duì)列以便取出。
15.如權(quán)利要求12所述的方法,其中插入所接收的進(jìn)程間消息的步驟包括以下步驟 將所插入的消息復(fù)制到所述節(jié)點(diǎn)的主存儲(chǔ)器。
16.如權(quán)利要求12所述的方法,其中插入所接收的進(jìn)程間消息的步驟包括以下步驟 以預(yù)定順序執(zhí)行指令和編譯器命令。
全文摘要
本發(fā)明涉及一種高性能低等待時(shí)間的消息傳送系統(tǒng)。披露了一種在至少一個(gè)節(jié)點(diǎn)上運(yùn)行的至少兩個(gè)進(jìn)程之間進(jìn)行高性能低等待時(shí)間的進(jìn)程間消息傳送的系統(tǒng)和方法。所述系統(tǒng)包括儲(chǔ)存設(shè)備(100),適于在儲(chǔ)存緩沖區(qū)(104)的隊(duì)列(102)中存儲(chǔ)進(jìn)程間消息,儲(chǔ)存緩沖區(qū)(104)在可由多個(gè)進(jìn)程并行訪問(wèn)的共享存儲(chǔ)器內(nèi)。指向單元(106、108)指向隊(duì)列(102)以向/從所述隊(duì)列插入/取出消息。所述進(jìn)程使用無(wú)鎖定的技術(shù)插入和取出消息,其增加了系統(tǒng)的吞吐量并使得其適于在諸如金融交易應(yīng)用之類的關(guān)鍵應(yīng)用中實(shí)現(xiàn)。
文檔編號(hào)G06F9/54GK101866303SQ201010164028
公開(kāi)日2010年10月20日 申請(qǐng)日期2010年4月9日 優(yōu)先權(quán)日2009年4月13日
發(fā)明者M·南比爾, R·曼沙拉馬尼, S·塞姆德拉拉 申請(qǐng)人:塔塔咨詢服務(wù)有限公司