我是一名c ++程序员。
我想知道一个实时场景,我们可以使用不同的IPC机制,如PIPE / Named,共享内存。
我大致知道在哪里可以使用套接字和消息队列。但对于PIPE /命名PIPE和共享内存我不知道。
这只是为了解不同的IPC机制及其用法。
谢谢,
答案 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方法及其用途。