进程之间的通信方式
1.共享存储
在通信的进程之间存在一块可以直接访问的共享空间,通过对共享空间进行写/读操作,实现进程之间的信息交换。
共享存储又分为两种:低级方式的共享是基于数据结构的共享,高级方式的共享则是基于存储区的共享。
2.消息传递
利用操作系统提供的消息传递方法实现进程通信,主要实现是基于发送消息和接收消息两个原语来实现。
消息传递可分为两种:
- 直接通信:发送进程直接把消息发送给接收进程,挂载到接收线程的消息缓冲队列上。
- 间接通信:发送进程先把消息发送给中间实体,接收进程再从中间实体取得消息。这种方式广泛应用于计算机网络中,例如电子邮件系统。
3.管道通信
所谓管道,是指用于连接一个读进程和写进程以实现它们之间的通信的一个共享文件,又名pipe文件。
管道文件与其他文件不同,管道是一个固定大小的缓冲区,在Linux中,限制为4KB,当所有数据已被读取时,管道变空,此时,read()调用将默认阻塞。
注意:乍看很像前面我们说到的共享文件存储,事实上,管道可以理解为是共享文件存储的优化和发展,因为共享文件存储考虑到读写控制问题,从而当有写进程时,会产生阻塞。
管道文件只允许一边写,一边读,从而不存在担心读写控制问题,避免了阻塞。
而当管道中有数据时,写进程不会往管道送数据,这意味着管道通信是半双工通信。