在IPC
回答
與管道相比,IPC套接字在雙向上有所不同,也就是說,讀寫操作可以在同一個描述符上完成。管道不同於套管,是單向的。如果要同時進行讀取和寫入,則必須保留一對描述符。
另一方面,管道在讀取或寫入一定量的字節時可以保證原子性。一次寫入少於PIPE_BUF
字節的內容將保證以一個塊傳送,並且不會觀察到部分內容。在這方面,套接字確實需要程序員更多的關注。
當共享內存用於IPC時,需要程序員的顯式同步。這可能是最有效和最靈活的機制,但這會增加複雜性成本。
使用真正的消息隊列往往會給你留下固定大小的消息。如果您有大量大小各異的消息,可能會導致性能問題。使用套接字可以解決這個問題,儘管你仍然試圖將這個功能封裝到一個隊列中去,這對於獲取詳細信息非常棘手,特別是阻塞/非阻塞和原子性等方面。
共享內存很快,但需要管理(最終編寫一個malloc版本來管理SHM),而且必須以某種方式進行同步和鎖定。雖然您可以使用庫來幫助解決問題,但可用性取決於您的環境和語言。
隊列很容易,但是我的套接字討論中列出的缺點列爲專業人員。
Blagovests管道已涵蓋此問題的答案。
和以往一樣,我會建議閱讀W. Richard Stevens關於IPC和套接字的書籍。沒有比他更好的解釋! :-)
也許這太簡單了一個答案,但它是一個重要的細節。所有操作系統都不支持套接字。最近,我已經意識到一個項目爲所有IPC的IPC使用套接字,但僅僅發現它們被迫從Linux更改爲POSIX專有操作系統,但不支持與Linux相同的套接字。
支持套接字的另一點:使用套接字的應用程序可以很容易地分發 - 即。它可以在一臺主機上運行,也可以在幾臺主機上輕鬆傳輸。這當然取決於應用程序的性質。
套接字讓你幾個好處......
你可以簡單的客戶端連接到他們的測試(手動輸入數據,請參見響應)。 這對於調試,模擬和黑盒測試非常有用。
您可以在不同的機器上運行這些進程。這對於可擴展性非常有用,並且在嵌入式軟件中工作時對調試/測試非常有幫助。
它變得非常容易暴露你的過程作爲服務
但也有缺點,以及
開銷比IPC單個機器優化更大。如果您需要性能,共享內存尤其更好,並且您知道您的進程都在同一臺機器上。
安全性 - 如果您的客戶端應用程序可以連接,其他人可以連接,如果您不認真進行身份驗證。如果您不加密數據,也可以嗅探數據,如果您至少未簽署通過線路發送的數據,則可以修改數據。
- 1. IPC在Fortran?
- 2. IPC問題 - IPC已經註冊
- 3. 廣播IPC在Linux上
- 4. 在Spring MVC portlets中的IPC
- 5. 在Visual Studio上的IPC
- 6. Linux IPC選擇?
- 7. IPC SendMessage問題
- 8. 廣播式IPC
- 9. IPC with Ruby 1.8.5
- 10. Android IPC參考
- 11. System V IPC&新
- 12. C++ IPC通信
- 13. 通過IPC
- 14. IPC端口範圍
- 15. IPC故障排除
- 16. RE:Posix和System V IPC
- 17. Windows上的JAVA IPC
- 18. Python IPC一對多
- 19. 使用IPC服務
- 20. IPC in firebreath(boost C++)
- 21. 命名管道IPC
- 22. WCF NamedPipe IPC通信
- 23. IPC mono <-> .NET?
- 24. 在ZeroMQ中使用ipc:///和ipc:// transport-class說明符有什麼區別?
- 25. Electron IPC:爲什麼我的ipc信息沒有被接收?
- 26. IPC在Vista(服務和應用程序)
- 27. Electron - IPC - 在窗口間發送數據
- 28. 在qt瀏覽器插件中的IPC
- 29. 在windows中用於IPC的AF_INET
- 30. IPC :: Open3在Apache下運行失敗
它可能是IPC套接字的一些暢通優勢的情況? – jasonkim 2012-02-22 18:06:21