2010-02-28 42 views

回答

2

我有一系列命令需要順序執行,但主要程序流程不依賴於它們的完成,所以我排隊起來,並經由被獨立地執行的System V消息隊列它們傳遞到另一個處理的主要計劃。由於消息隊列提供異步通信協議,因此它們非常適合執行此任務。

說實話,我用System V消息隊列,因爲我從來沒有使用過他們,我想。我確信還有其他IPC方法可以使用。


這已經有一段時間,因爲我做了任何真正的VxWorks編程,但你也可以找到在VxWorks的應用程序中使用消息隊列。根據VxWorks Application Programmer's Guide(谷歌搜索),一個CPU內的主任務間通信機制是消息隊列。 VxWorks使用兩個消息隊列子程序庫(POSIX和VxWorks)。

1

我曾經寫過一個文字模式的I/O生成工具,曾在負責更新UI和若干工作線程來做實際的I/O工作的一個線程。當一個工作線程完成一個I/O時,它發送一個更新消息給UI線程。我使用POSIX消息隊列實現了這個消息系統。

爲什麼要這樣實施?當時聽起來是個好主意,我很好奇他們是如何工作的。我想我可以解決問題並同時學習一些東西。我可以使用許多不同的技術,而且我不認爲我選擇這種技術有什麼深遠的原因。直到後來我才意識到這一點,但當我必須將該實用程序移植到另一個系統時,我很高興我使用了POSIX隊列(它也符合POSIX標準,所以我不必擔心移植外部庫來獲取我的應用程序運行)。

1

,因爲它是一個IPC機制,您可以使用它的IPC是肯定的。通過這種機制,您可以編寫多進程事件處理應用程序,其中所有應用程序都使用隊列,並且每個應用程序都在等待特殊類型的消息(將發生特殊事件)。當消息到達時,進程接收消息,處理並將結果放回隊列中,以便其他進程可以使用它。
一旦我使用消息隊列寫這樣一個應用程序。使用它非常容易,並且不需要像信號量這樣的進程間同步機制。在所有你需要的只是發送一個結構或某種打包數據到其他進程的情況下,你可以使用它來代替內存映射文件的共享內存。消息隊列比任何其他IPC機制更容易使用。
This book包含您需要了解的有關Linux中消息隊列和其他IPC機制的所有信息。

+0

你還沒有解釋爲什麼人們會想要這些蹩腳的老東西而不是套接字。 – tchrist 2013-03-01 18:26:23

+0

實際上,消息隊列允許您將多個應用程序彼此分開,並創建允許不同組件彼此分離的Message Broker體系結構;並且允許你實現類似RPC的機制,套接字可以用作實現這種體系結構的傳輸機制,但是你需要一個更高級別的協議。要了解更多關於消息隊列的信息,請參閱http://www.zeromq.org – gst 2013-04-05 10:17:49