(PS:系统ipc包括Semaphore,Message,SharedMemory)
一、Pipe(管道):
1、管道可以是单向-一端是只读的,另一端点是只写的;也可以是双向的一管道的两端点既可读也可写。
2、匿名管道(Anonymous Pipe)是 在父进程和子进程之间,或同一父进程的两个子进程之间传输数据的无名字的单向管道
3、命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用
4、它可以看成是一种特殊的文件,固定大小的缓存区,对于它的读写也可以使用普通的read、write 等函数。
5、但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
二、Semaphore(信号量):信号量(semaphore)是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
1、用于进程间同步,若要在进程间传递数据需要结合共享内存。
2、信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
3、 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
4、支持信号量组。
三、Message(消息队列):消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
1、消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
2、消息队列独立于发送与接收进程。
3、进程终止时,消息队列及其内容并不会被删除。
4、消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取
四、SharedMemory(共享内存):指两个或多个进程共享一个给定的内存空间
1、共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。
2、因为多个进程可以同时操作,所以需要进行同步。
3、信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
4、共享内存是内存映射文件的一种特殊情况,内存映射的是一块内存,而非磁盘上的文件
五、Socket(套接字):
1、每个进程对应一个端口号,可实现不同进程间的通信
2、可用于不同机器间的进程通信
六、文件映射
1、文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。
2、因此,进程不必使用文件I/O操作, 只需简单的指针操作就可读取和修改文件的内容。