2011-01-31 24 views
5

我是一名C++程序員。使用不同的IPC機制

我想知道一個實時的場景,我們可以使用不同的IPC機制,如PIPE/Named,Shared Memory。

我大致知道我可以在哪裏使用套接字和消息隊列。但對於PIPE /命名PIPE和共享內存我沒有任何想法。

這只是爲了解不同的IPC機制及其用法。

感謝,

回答

1

我需要使用命名管道與我作爲守護進程運行的Erlang虛擬機進行通信。

我相信它們正在慢慢地被「套接字」取代,因爲它提供了雙向通信,而不像管道,只有單向,除非我們創建了兩個不同的管道。

共享內存仍然在大型服務器應用程序中使用,因爲它將是多處理器系統上所有其他機制中最快的,但通常難以以正確的方式實現。

只有在需要通過網絡進行通信時才需要使用套接字。

再次把它歸結爲一件事「使用哪種最適合您的應用程序機制」

1

我們已經在我們公司使用共享內存的軟件。它使用它將數據從一個進程傳輸到其他進程。套接字可以用於它,但由於它是一對多的,所以應該爲每個消費者過程創建一個單獨的套接字,而這個套接字並不是最優的。在現代計算機上使用共享文件可能會完成這項工作,但是這個軟件是在90年代中期開發的,當時磁盤速度很慢,而且這個軟件對延遲要求非常嚴格。它使用一種循環緩衝區,生產者進程寫入其數據。信號量用於同步,所以其他進程不會看到部分更新的數據。

儘管如此,在大多數現代軟件中,線程通常用來代替使用共享內存的多進程。

至於管道,對他們來說最常見的用途是殼管:

ps ax | grep java 

我相信命名管道在很大程度上是由插座代替。即使他們仍然有他們的用途,我不知道他們中的任何人。

您也可以閱讀Eric Steven Raymond的the relevant chapter of the Art of Unix Programming。它給出了Unix IPC方法及其用法的非常好的概述。

+0

感謝您的寶貴comment.I相信PIPE /命名飽得更快仍在使用它比socket.What我相信是當飛行控制是必要的,我們應該使用socket.Please確實把你的評論管道和共享內存。 – 2011-01-31 11:06:38

+0

@Chris_vr,我說的是我沒有看到很多使用命名管道的程序。他們更快的事實本身並不足以使用它們,因爲這將是過早優化的標誌。我可以同意他們可以使用,因爲他們更簡單,但仍然沒有被廣泛使用。 Eric Steven Raymond [似乎同意這一點](http://www.faqs.org/docs/artu/ch07s02.html#plumbing)。 – 2011-01-31 12:19:49