2013-08-22 288 views
5

我看到here(關於IPC的維基百科文章),這些是兩個獨立的東西,但即使閱讀每個人的專用維基百科頁面,我也不明白它們有什麼不同。消息隊列與消息傳遞

有人可以解釋這一點嗎?

回答

-1

正如我所看到的,Message Passing描述了一個協議,而消息隊列是一個實現細節。

請考慮以下事項: 您的應用程序通過傳遞消息交換數據的方式明確。這意味着您已經實現了一個協議,該協議描述了可以發送什麼消息以及應用程序如何響應。這就是我本質上稱之爲消息傳遞的原因。

現在,您可能已經通過多種方式實現了這一點。

  • 您可能已經告訴您的應用程序接收消息,對其進行處理並將答案傳回,並在此期間完全忽略其他傳入的消息。
  • 您可以告訴您的應用程序的每個線程的一個消息,工作,使用專用線程監聽傳入消息

隊列將是接收與消息傳遞和交付您的協議的消息一實施存儲它們。這使得它們可以按照它們到達的順序逐個提供給應用程序的內部。但還有更多。

  • 隊列可以查詢其他隊列
  • 隊列可能需要一定的消息轉發到另一個隊列
  • 一個隊列被多個客戶端或轉發一條消息,詢問不止一個客戶端

所以消息傳遞只是一種說法:「我有這條指令或者我想要交給某人的代碼塊」。表示消息隊列的程序是消息的接收者,並且可以向其應用附加的邏輯。

3

消息傳遞是一個非常通用的術語。它可以從不同的方面進行檢查,其中的一個是如何將數據從發送方傳輸到接收器:

  • 同步消息傳遞:發送器和接收器具有以「滿足」在其各自的send/receive操作,以便可以傳輸數據。這也被稱爲「交會」或「握手」。這種傳輸方式很簡單,但可能效率低下,因爲發件人可能必須等待,即使它已完成其職責並準​​備好要發送的數據。

  • 異步消息傳遞:發送者不等待接收器達到其receive操作,而是擺脫了準備的數據,並繼續執行。這種傳輸形式不會強制發送者等待,但會產生另一個問題:可能有已經發送但尚未收到的消息,並且它們必須存儲在某處。這是消息隊列起作用的地方,它們是在途消息的緩衝區。

因此,您的問題的答案是,當消息傳遞是異步完成而不是同步完成時,使用/需要消息隊列。