簡體   English   中英

管道和插座有什么區別?

[英]What's the difference between pipe and socket?

兩者都可用於不同進程之間的通信,

有什么不同?

Windows有兩種管道:匿名管道和命名管道。 匿名管道(非常)與Unix管道緊密相對 - 通常用於父進程將它們設置為由子進程繼承,通常連接到子進程的標准輸入,輸出和/或錯誤流。 有一段時間,匿名管道的實現方式與命名管道完全不同,因此他們沒有(例如)支持重疊I / O. 從那時起,這已經改變,所以匿名管道基本上只是一個名稱你不知道的命名管道,所以你不能按名稱打開它,但它仍然具有命名管道的所有其他功能(如前面提到的重疊I / O能力)。

Windows命名管道更像是套接字。 它們起源於OS / 2,它們最初是創建客戶端/服務器應用程序的主要機制。 它們最初是圍繞NetBIOS構建的(即,使用NetBIOS進行尋址和傳輸)。 它們與Windows身份驗證等緊密集成,因此您可以(例如)使用命名管道服務器模擬客戶端,以限制服務器執行客戶端直接登錄時可以執行的操作。 最近,MS為擺脫對NetBIOS的依賴而遇到了一些麻煩,但即使他們現在可以使用IP作為其傳輸(以及用於尋址的DNS,IIRC),它們仍然主要用於Windows機器。 其他機器的主要用途是模仿Windows,例如運行Samba。

(從http://www.perlmonks.org/?node_id=180842無恥地抄襲)

管道快速可靠,因為它們在單個主機的內存中實現,其中兩個通信進程都在運行。 套接字速度較慢且可靠性較低,但更靈活,因為它們允許不同主機上的進程之間進行通信。

套接字將使用某種IP協議,如TCP / IP或UDP,因此速度較慢,但​​如果您需要通過網絡進行通信,則代碼將更具可移植性。 有第三個共享內存方法和第三個Mach端口(在這種情況下,我不確定它是否適用於Windows)

(在我的頭頂)

管道:一端有小碗的管子; 用於吸煙

插座:插入某物(管道,探針或骨頭末端)的插座

無論如何:

“管道和套接字之間的一個主要區別是管道需要一個共同的父進程來建立通信通道。套接字之間的連接可以由兩個不相關的進程建立,可能駐留在不同的機器上。”

它們都具有相同的功能,唯一的區別是管道效率更高,因為它們最接近互聯網的准系統。 套接字是一系列管(管道)之上的抽象,因此它們更慢(就像java比本機匯編代碼慢)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM