使用不同的IPC机制

时间:2011-01-31 10:33:23

标签: c++ ipc

我是一名c ++程序员。

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

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

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

谢谢,

2 个答案:

答案 0 :(得分:2)

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

我认为它们正逐渐被“socketpairs”所取代,因为它提供了双向通信,不像管道,只有单向管道,除非我们创建两个不同的管道。

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

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

同样,它归结为一件事“使用最适合您应用的机制

答案 1 :(得分:1)

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

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

对于管道,最常见的用途是外壳管道:

ps ax | grep java

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

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