不同IPC机制的使用

Posted

技术标签:

【中文标题】不同IPC机制的使用【英文标题】:Usage of Different IPC mechanism 【发布时间】:2011-01-31 10:33:22 【问题描述】:

我是一名 C++ 程序员

我想知道一个实时场景,我们可以使用不同的 IPC 机制,例如 PIPE/命名、共享内存。

我大致知道在哪里可以使用套接字和消息队列。但是对于 PIPE/Named PIPE 和共享内存,我不知道。

这只是为了了解不同的 IPC 机制及其用法。

谢谢,

【问题讨论】:

【参考方案1】:

我需要使用命名管道与作为守护进程运行的 Erlang Vitual Machine 进行通信。

我相信它们正在慢慢被“socketpairs”取代,因为它提供双向通信,不像管道那样只有单向,除非我们创建两个不同的管道。

共享内存仍在大型服务器应用程序中使用,因为它将是多处理器系统上所有其他机制中最快的,但通常很难以正确的方式实现。

只有在需要通过网络进行通信时才需要使用套接字。

再次归结为一件事“使用最适合您的应用程序的机制

【讨论】:

感谢大家,我认为这将为 IPC 的使用提供票价概念。【参考方案2】:

我们公司有一些使用共享内存的软件。它使用它将数据从一个进程流式传输到其他一些进程。可以使用套接字,但由于它是一对多的,因此应该为每个消费者进程创建一个单独的套接字,这并不是最佳的。在现代计算机上使用共享文件可能会完成这项工作,但该软件是在 90 年代中期开发的,当时磁盘非常慢,而且该软件具有非常严格的延迟要求。它使用一种循环缓冲区,生产者进程将其数据写入其中。信号量用于同步,因此其他进程不会看到部分更新的数据。

不过,在大多数现代软件中,通常使用线程而不是使用共享内存的多个进程。

至于管道,它们最常见的用途是壳管:

ps ax | grep java

我相信命名管道在很大程度上被套接字所取代。即使它们仍然有它们的用途,我也不知道它们中的任何一个。

您可能还希望阅读 Eric Steven Raymond 的 the relevant chapter of the Art of Unix Programming。它很好地概述了 Unix IPC 方法及其用途。

【讨论】:

感谢您的宝贵评论。我相信 PIPE/Named 仍然使用完整它比套接字快。我相信当需要飞行控制时我们应该使用套接字。请务必将您的评论用于管道和共享内存。 @Chris_vr,我的意思是我没有见过很多使用命名管道的程序。它们更快的事实本身并不足以使用它们,因为这将是过早优化的标志。我同意它们可以被使用,因为它们更简单,但它们仍然没有被广泛使用。埃里克·史蒂文·雷蒙德 seems to agree with this.

以上是关于不同IPC机制的使用的主要内容,如果未能解决你的问题,请参考以下文章

Android——IPC机制IPC概念以及Binder机制

Android艺术开发探索——第二章:IPC机制(下)

IPC机制总结

计算机基础OS 进程间通信(IPC)机制介绍

IPC机制2

序列化作为 IPC 机制?