在IPC

2012-02-16 61 views
5

中使用Socket的優點和缺點在最近的一些訪談中,我曾經問過這個問題,在IPC有其他方式執行IPC時使用Socket的優缺點是什麼。沒有找到確切的答案。在IPC

任何幫助將不勝感激。

回答

6

與管道相比,IPC套接字在雙向上有所不同,也就是說,讀寫操作可以在同一個描述符上完成。管道不同於套管,是單向的。如果要同時進行讀取和寫入,則必須保留一對描述符。

另一方面,管道在讀取或寫入一定量的字節時可以保證原子性。一次寫入少於PIPE_BUF字節的內容將保證以一個塊傳送,並且不會觀察到部分內容。在這方面,套接字確實需要程序員更多的關注。

當共享內存用於IPC時,需要程序員的顯式同步。這可能是最有效和最靈活的機制,但這會增加複雜性成本。

+0

它可能是IPC套接字的一些暢通優勢的情況? – jasonkim 2012-02-22 18:06:21

0

使用真正的消息隊列往往會給你留下固定大小的消息。如果您有大量大小各異的消息,可能會導致性能問題。使用套接字可以解決這個問題,儘管你仍然試圖將這個功能封裝到一個隊列中去,這對於獲取詳細信息非常棘手,特別是阻塞/非阻塞和原子性等方面。

共享內存很快,但需要管理(最終編寫一個malloc版本來管理SHM),而且必須以某種方式進行同步和鎖定。雖然您可以使用庫來幫助解決問題,但可用性取決於您的環境和語言。

隊列很容易,但是我的套接字討論中列出的缺點列爲專業人員。

Blagovests管道已涵蓋此問題的答案。

和以往一樣,我會建議閱讀W. Richard Stevens關於IPC和套接字的書籍。沒有比他更好的解釋! :-)

1

也許這太簡單了一個答案,但它是一個重要的細節。所有操作系統都不支持套接字。最近,我已經意識到一個項目爲所有IPC的IPC使用套接字,但僅僅發現它們被迫從Linux更改爲POSIX專有操作系統,但不支持與Linux相同的套接字。

1

支持套接字的另一點:使用套接字的應用程序可以很容易地分發 - 即。它可以在一臺主機上運行,​​也可以在幾臺主機上輕鬆傳輸。這當然取決於應用程序的性質。

1

套接字讓你幾個好處......

  • 你可以簡單的客戶端連接到他們的測試(手動輸入數據,請參見響應)。 這對於調試,模擬和黑盒測試非常有用。

  • 您可以在不同的機器上運行這些進程。這對於可擴展性非常有用,並且在嵌入式軟件中工作時對調試/測試非常有幫助。

  • 它變得非常容易暴露你的過程作爲服務

但也有缺點,以及

  • 開銷比IPC單個機器優化更大。如果您需要性能,共享內存尤其更好,並且您知道您的進程都在同一臺機器上。

  • 安全性 - 如果您的客戶端應用程序可以連接,其他人可以連接,如果您不認真進行身份驗證。如果您不加密數據,也可以嗅探數據,如果您至少未簽署通過線路發送的數據,則可以修改數據。