且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

12、IPC通信比较

更新时间:2022-08-21 20:43:22

IPC通信

1、pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。管道的缓冲区是有限的(管道存在于内存中,在管道创建时,为缓冲区分配一个页面大小);管道所传送的是无格式字节流,要求管道的读出方和写入方必须事先约定好数据的格式

2、命名管道(fifo):命名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。严格遵循先进先出(first in first out),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。诸如不支持lseek()等文件定位操作。

3、信号量(semophore )信号量是一个计数器,可以用来控制多个进程对共享资源的访问。主要作为进程间以及同一进程内不同线程之间的同步手段。二元信号量:与Mutex类似

4、消息队列(message queue ):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。可以用非先进先出方式处理;消息队列是异步通信的;消息队列有大小限制,通常只用于小数据量的发送;只适用于单台主机的进程间通信;

5、共享内存( shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式。效率高,进程可以直接读写内存,而不需要任何数据的拷贝;在共享内存段中都是以字符串的默认结束符为一条信息的结尾。每个进程在读写时都遵守这个规则,就不会破坏数据的完整性。