内存映射文件比命名管道快吗?

Posted

技术标签:

【中文标题】内存映射文件比命名管道快吗?【英文标题】:Are memory mapped files faster than Named Pipes? 【发布时间】:2013-04-02 14:34:31 【问题描述】:

我正在阅读 SQL Server Internals and Troubleshooting (Wrox),它实际上说Shared Memory 是默认连接方法,然后是 TCP,然后是命名管道。但奇怪的是他们说:

“命名管道是为局域网 (LAN) 开发的,但它在广域网 (WAN) 等较慢的网络中可能效率低下”

我认为命名管道仅适用于 IPC?为了从 IPC 跳转到网络通信,您必须使用 TCP/UDP。对我来说更有趣的是提到共享内存/内存映射文件 - 它们比 NamedPipes/IPC 快吗?

【问题讨论】:

IPC作为一个概念并不局限于单台机器,所以我不理解“我认为命名管道严格用于IPC” 这很好。我想我的意思是我认为命名管道严格用于在同一台机器上跨不同进程/应用程序域进行通信。 【参考方案1】:

和往常一样,答案是“视情况而定”。如果涉及大量数据,共享内存将减少复制它的大部分开销。但是以这种方式使用映射文件仍然需要某种辅助形式的 IPC 来协调对共享内存空间的访问。

【讨论】:

哦,我明白了,所以本质上你仍然需要一个管道来协调内存映射文件的使用方式,在某些情况下,单独使用管道会更快吗?有趣的。我想在我的情况下,内存映射文件是有意义的。 只是为了确认/否认我的怀疑。管道是否严格用于同一台机器上的 IPC,或者它们也可以通过网络使用? 不,您不需要管道来协调。您可以为标志和其他控制数据保留 MMF 的一个区域。当然,您必须小心同步。您也可以使用 ManualResetEvent 或其他信号事件进行同步。 (管道可以通过网络使用) 是的,这基本上是正确的;尽管除了管道之外还有其他可能用于协调的机制。例如,System V 消息队列或 Mach IPC 端口。

以上是关于内存映射文件比命名管道快吗?的主要内容,如果未能解决你的问题,请参考以下文章

命名管道端口号

再探进程间通信

再探进程间通信

Linux入门进程间的通信

Linux入门进程间的通信

Linux入门进程间的通信