2010-08-19 85 views
10

既可以用於不同進程之間的通信,管道和插座有什麼區別?

有什麼區別?

+7

主題聽起來像一個惡意的玩笑 – 2010-08-19 03:56:34

+0

所以給我們的衝壓生產線的開始! – peterchen 2010-08-19 06:39:29

回答

4

的Windows有兩種管道:匿名管道和命名管道。匿名管道與Unix管道(相當)密切相關 - 典型的用法是讓父進程將它們設置爲由子進程繼承,通常連接到子進程的標準輸入,輸出和/或錯誤流。有一次,匿名管道與命名管道完全不同,所以他們沒有(例如)支持重疊的I/O。從那以後,這種情況發生了變化,因此匿名管道基本上只是一個名稱不明的名稱管道,因此無法通過名稱打開它,但它仍具有命名管道的所有其他功能(例如前述重疊的I/O能力)。

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

0

(關我的頭的頂部)

管:具有在一端具有小碗的管;用於菸絲

插槽:插座,其中一些(骨的管,探針或端)被插入

反正:

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

+0

大聲笑,但它不是編程相關.. – wamp 2010-08-19 03:55:35

+2

@VoodooChild:羞恥:) – 2010-08-19 03:55:40

+1

這是命名事情的麻煩,這很難。在Windows環境中,「命名管道」更像是一個套接字,用於將客戶端連接到不同機器上的服務器。 – 2010-08-19 04:06:13

3

(從http://www.perlmonks.org/?node_id=180842無恥那兒剽竊)

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

+1

管道還允許不同主機之間的通信。請注意,它被標記爲[Windows],所以我們在討論Windows管道,而不是Unix管道。 – 2010-08-19 04:20:13

+0

一根管子可以多次使用嗎?正如在本文中,在我看來,一個管道只能使用一次(一旦使用就會關閉):http://msdn.microsoft.com/en-us/library/aa365588%28v=VS.85%29。 aspx – wamp 2010-08-19 04:21:01

+0

@Jerry - true - 一旦發生這種情況(機器間通信),管道和套接字之間是否有很大區別,至少在速度方面? – 2010-08-19 06:39:03

1

套接字將使用某種形式的IP協議如TCP/IP或UDP的,因而會比較慢,但是你的code'd是更便攜,如果你需要通過網絡進行通信。還有第三個共享MEM方法,並提出馬赫端口(在這種情況下,我不知道它會在Windows工作)

-4

他們都做同樣的功能,唯一的區別是,管道是因爲他們最接近的更有效人們可以到互聯網的準系統。套接字是建立在一系列管道(管道)之上的抽象,因此它們速度較慢(就像java比本地彙編代碼一樣慢)。