訊息佇列

訊息佇列是個交互程序通訊 (IPC) 機制,可讓單一 CPU 內獨立但協同的作業(即作用中類別)可以彼此通訊。

作用中的類別會被視為 IBM® Rational® Rhapsody® 中的作業。

訊息佇列是非共用記憶體環境中所使用的緩衝區,其中作業是透過彼此傳遞訊息來進行通訊,而不是透過存取共用的變數。這些作業共用一般的緩衝池,其中 OMOSMessageQueue 實作該緩衝區。訊息佇列是個無界限的「先進先出 (first-in-first-out),FIFO」佇列,其受保護不讓不同的執行緒同時存取。

事件是非同步。當類別傳送事件至另一個類別時,並非直接將事件傳送至目標回應類別,而是將事件傳遞至作業系統訊息佇列,且當目標類別準備好要處理事件時,會從訊息佇列標頭擷取該事件。可以改用觸發的作業來傳遞同步的事件。

許多作業可以將訊息寫入佇列,但一次只有一個作業能從佇列讀取訊息。讀取器會在訊息佇列上等待直到有需要處理的訊息。訊息可以是任何大小。

要彼此通訊的程序必須以某種方式鏈結。通訊鏈結是由關係所組成,其形式就像在物件模型圖中類別之間所繪製的關聯線。鏈結可以是單向或雙向(對稱)。若是從類別 A 至類別 B 的單向鏈結,類別 A 可以傳送訊息至類別 B,但是類別 B 無法傳送訊息至類別 A。若是雙向鏈結,則兩個類別可以彼此傳送訊息。訊息佇列連接著鏈結,並允許訊息的傳送端和接收端單獨繼續其自己的處理活動。

在具有記憶體保護的作業系統中,一個作用中類別可以呼叫另一個作用中類別的作業,如果作業系統本身支援這類直接呼叫的話,則會在這兩者之間給定關聯的關係。若是具有共用記憶體的作業系統,產品會使用作業系統傳訊來傳遞事件。記憶體保護是否支援直接函數呼叫,要視作業系統本身而定,而不是 Rational Rhapsody 架構。

Rational Rhapsody 應用程式中,BaseNumberOfInstances 內容(在 CG::Event 下方)會指定配置給事件使用的記憶體儲存區起始大小。這個儲存區在程式起始設定時是動態配置。 AdditionalNumberOfInstances 內容(在 CG::Event 下方)會指定當起始儲存區變滿的時候,執行時期需要配置的任何額外記憶體大小。額外記憶體配置會在資料堆上完成,並包括重新排列起始記憶體儲存區。


意見回饋