它们是什么?它们是如何工作的?
上下文恰好是SQL Server
发布于 2008-10-06 18:50:14
在Windows和POSIX系统上,命名管道都提供了一种在同一台计算机上运行的进程之间进行进程间通信的方法。命名管道为您提供了一种发送数据而不涉及网络堆栈的性能损失的方法。
就像您的服务器监听IP地址/端口的传入请求一样,服务器也可以设置一个命名管道来监听请求。在这两种情况下,客户端进程(或DB访问库)都必须知道发送请求的特定地址(或管道名称)。通常,存在一个常用的标准缺省值(与HTTP的端口80非常相似,SQL server在TCP/IP中使用端口1433;\.\pipe\sql\query查找命名管道)。
通过设置额外的命名管道,您可以运行多个DB服务器,每个服务器都有自己的请求侦听器。
命名管道的优点是它通常要快得多,并且可以释放网络堆栈资源。
--顺便说一句,在Windows环境中,您还可以拥有到远程计算机的命名管道--但在这种情况下,命名管道是通过TCP/IP传输的,因此您将损失性能。使用命名管道进行本地计算机通信。
发布于 2008-10-06 20:51:09
Unix和Windows都有称为“命名管道”的东西,但它们的行为不同。在Unix上,命名管道是一条单行道,通常只有一个读取器和一个写入器-写入器写,读取器读,你明白了吗?
在Windows上,被称为“命名管道”的东西是一个更像TCP套接字的IPC对象-事物可以双向流动,并且有一些元数据(您可以在另一端获得事物的凭证等)。
Unix命名管道在文件系统中显示为一个特殊的文件,可以通过包括shell在内的普通文件IO命令进行访问。Windows ones不需要,需要用一个特殊的系统调用来打开(之后它们的行为很像一个普通的win32句柄)。
更令人困惑的是,Unix有一种叫做"Unix socket“或AF_UNIX套接字的东西,它的工作方式更像(但不完全像) win32的”命名管道“,是双向的。
发布于 2008-10-06 18:38:24
比较
echo "test" | wc
至
mkdnod apipe p
wc apipe
wc将被阻止,直到
echo "test" > apipe
执行
https://stackoverflow.com/questions/175579
复制相似问题