进程间通信的五种方式

it2024-11-23  34

参考文章

1.管道

特点:

1.它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端 2.它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间) 3.它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中

2.FIFO

特点:

1.FIFO可以在无关的进程之间交换数据,与无名管道不同 2.FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。 (FIFO的通信方式类似于在进程中使用文件来传输数据,只不过FIFO类型文件同时具有管道的特性。在数据读出时,FIFO管道中同时清除数据,并且“先进先出”。)

3.消息队列

特点:

1.消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级 2.消息队列独立于发送和接收进程。进程终止时,消息队列及其内容并不会被删除 3.消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

4.信号量

特点:

1.信号量用于进程同步,若要在进程间传递数据需要结合共享内存。 2.信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。 3.每次对信号量的PV操作不仅限于对信号量加1或减1,而且可以加减任意正整数。 4.支持信号量组。

5.共享内存

特点:

1.共享内存是最快的一种IPC,因为进程是直接对内存进行存取。 2.因为多个进程可以同时操作,所以需要同步 3.信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。

五种通信方式总结

1.管道:速度慢,容量有限,只有父子进程能通讯 2.FIFO:任何进程间都能通信,但是速度慢 3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上次没有读完数据的问题 4.信号量:不能传递复杂消息,只能用来同步 5.共享内存区:能够很容器控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存同样可以用作线程间通信,不过没有这个必要,线程间本来就已经共享了同一进程内的一块内存

最新回复(0)