2009-09-12 70 views
7

IPC與Unix域套接字和命名管道有什麼不同?IPC vs域襪子與命名管道

我從各種書中得到了模糊的定義,但無法弄清楚哪一個應該用在哪裏。

+0

該線程似乎得到更多的關注:http://stackoverflow.com/questions/9475442/unix-domain-socket-vs-named-pipes – schmijos 2013-03-23 10:04:14

回答

6

幾乎任何方式兩個進程相互溝通可以被視爲一種形式的IPC。

例如:

  1. 命名管道(貓file.txt的| grep的富)或Named Pipes
  2. UNIX域套接字
  3. TCP或UDP套接字
  4. Netlink Sockets on Linux
  5. 各種共享內存機制如內存映射文件
  6. 高速消息傳遞,例如ZeroMQ
6

由於qrdl指出,UNIX域套接字和命名管道都是IPC機制。

在這兩個命名管道中,使用起來比較簡單,但比UNIX域套接字靈活得多。例如,如果您希望每個寫入過程都有多個讀取過程,那麼UNIX域套接字是必須的;如果您希望在執行寫入過程期間讀取過程停止並開始,那麼您將需要UNIX域套接字。

0

感謝聚焦的問題,很少更新的功能:

在域套接字,實際通信(數據交換)不使用文件系統,但在緩存內核內存。默認情況下,它是全雙工模式。

命名管道由其接入點標識,該接入點是文件系統上保存的用於處理數據的文件。默認情況下命名管道支持阻塞的讀取和寫入操作。但是,可以通過在打開命名管道時指定O_NONBLOCK標誌來使命名管道支持非阻塞操作。命名管道必須以只讀或只寫方式打開。它不能打開進行讀寫,因爲它是半雙工的單向通道。

+2

OP被問及域套接字。域套接字通常在管道上實現,因此它們與管道一樣快。域套接字非常有用,因爲它們與網絡套接字具有完全相同的接口(只是不同的套接字系列),所以如果您的應用程序支持套接字,並且您發現雙方都位於同一臺計算機上,則可以輕鬆切換到域套接字以加快速度(X Windows就是這樣)。所以你的回答是不正確的。 – qrdl 2009-09-13 05:28:00

+0

希望它更新得很好。 – 2009-09-13 15:22:02