管道:
1.不是文件(不属于任何文件系统),但为了便于理解管道通信,可被看作是一个 特殊的 文件。
2.只存在于内存中。
3.只适合 父子进程 通信。
4.只适合 单向通信(半双工)。
5.发送接收机制:通过 read、write流
6.缺点:数据没有边界,需要应用程序自己解释。而一般消息 由 一个固定长 的 消息头,和一个变长的 消息体,子进程从管道read到消息头后,消息体可能被别的子进程接收到。
命名管道:
1.是文件,有路径名,以一种特殊的 设备文件 形式 存在于文件系统中。
2.可在无关进程间 交换数据。
消息队列:
1.是个链表,每个消息体是固定大小的存储块,如果进程从 消息队列中 读取了消息体,内核会把这个消息体删除
2.如果没有释放消息队列,或没有关闭操作系统,消息队列会一直存在
共享内存:
1.最快的 通信方式
2.本质: 内存开辟一块 物理内存,而非pcb的虚拟内存。
3.多个进程 可以将 自己的虚拟地址 映射到这块内存上面,从而实现通信
4.相较于其他方式,这种方式会降低 输入 输出数据的 拷贝次数,从而降低效率
5映射方式如图: 两边是不同的进程 通过页表 映射
6.共享内存 的 操作流程
1.创建共享内存,在内存上开辟空间
2.映射,进程将自己的共享内存 映射到 自己的 虚拟地址空间
3.进行基本的IO操作
4.操作完毕,结束映射关系
5.释放内存空间
7. 共享内存没有同步互斥,因此需要用户手动去添加,否则多进程访问时会出现安全问题