Linux 的进程间通信方式(IPC)
进程间通信(IPC)是什么
现在操作系统都是多进程,各个进程并发的执行,进程间基本都会涉及到数据的共享,这就需要进程之间通信去交换数据,但是进程本身之间是无法之间交流的,这就是本文讨论的问题。
Linux进程间的通信方式主要有下面几种
1.管道。
管道是在内存创建一个大小为Page的共享内存区域的文件。
管道(pipe),Linux上的管道在具体实现中,根据通信所使用的的文件是否具有名称,分两种类型:
1)匿名管道。
匿名管道最常见的形态就是我们在shell操作中最常用的”|”。
2)命名管道FIFO。
管道不适合大量数据的传输。
2.消息队列。
消息队列会有两次的copy,会造成额外的消耗。不适合频繁及数据量很大。
3.共享内存。
共享内存就是不同的虚拟地址内存映射到相同的物理内存上。可以对相同的一块区域读写。它不需要复制,多个进程可以共享一块内存,但是各个进程之间没有同步的机制,所以需要额外去实现同步机制来保证数据的一致性。
4.套接字(socket),服务端的进程和客户端的进程模式,走的是网络通信,所以效率比较低。
5.信号量。
信号量是一种锁机制,是为了防止多个进程之间访问共享资源一种同步的技术。
6.信号。
信号主要用于操作系统给进程发送信号,比如操作系统给某个进程发送中断信号。