进程间通信IPC方式特点总结

本文深入探讨了进程间通信(IPC)的各种类别,包括网络通信(套接字)、本地通信(管道、消息队列、信号、信号量、共享内存),并重点解析了匿名管道、命名管道、消息队列等核心方式的特点。了解这些,有助于开发者设计高效、安全的多进程协作系统。
摘要由CSDN通过智能技术生成

进程间通信IPC分类

每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。进程间的通信方式按照是否为同一机器上的进程分为:

网络进程间通信:套接字(socket) 
本地进程间通信:管道、消息队列、信号、信号量、共享内存

进程间通信的三种本质方式:

1、磁盘I/O文件
2、内核
3、内存 

进程间通信IPC各个方式的特点

IPC方式特点
匿名管道1、仅存在于具有亲缘关系的进程(父子进程或者兄弟进程)之间通信
2、半双工通信方式,数据单方向流动,具有固定的读端和写端(若需双向通信需要两个管道)
3、通信数据为无格式流且大小受限
4、匿名管道的生命周期随着进程创建而创建,随着进程终止而消失
5、只存在于内存的特殊文件、不属于文件系统,可以使用普通的read、write等函数,不可以使用lseek等特殊函数
命名管道1、FIFO创建了一个类型为管道的设备文件,它以一种特殊设备文件形式存在于文件系统中,不可以使用lseek等特殊函数
2、FIFO可以在无关的进程之间交换数据,与无名管道不同,进程里只要使用这个设备文件,就可以相互通信
3、通信数据为无格式流且大小受限
4、半双工通信方式,数据单方向流动,具有固定的读端和写端(若需双向通信需要两个管道)
消息队列1、全双工双向通信、既可以发送消息、也可以接受消息
2、消息队列生命周期随内核,如果没有释放消息队列或者没有关闭操作系统,消息队列会一直存在
3、消息队列是保存在内核中的消息链表,通信过程中,存在用户态与内核态之间的数据拷贝开销,通信不及时
4、消息队列不适合比较大数据的传输,大小受限制。因为在内核中每个消息体都有一个最大长度的限制,同时所有队列所包含的全部消息体的总长度也是有上限。在 Linux 内核中,会有两个宏定义 MSGMAX 和 MSGMNB,它们以字节为单位,分别定义了一条消息的最大长度和一个队列的最大长度
5、用户可以自定义消息队列中消息体的数据类型、存在数据格式、非字节流,消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
6、消息队列可以实现消息的随机查询,消息不一定要以先进先出方式读取,也可以按消息的类型读取(相同类型的消息按照先进先出)
信号量1、信号量不仅可以实现进程间的互斥访问,还可以实现进程间的同步
2、信号量其实是一个计数器,表示的是资源个数,其值可以通过两个原子操作来控制,分别是 P 操作和 V 操作。
信号信号是进程间通信机制中唯一的异步通信机制,信号可以在应用进程和内核之间直接交互
共享内存1、共享内存为相互的通信的进程提供了同一块物理内存空间,每个进程都可以直接访问,不需要用户内核之间的数据拷贝或者系统调用,大大提高了通信的速度,是最快的进程间通信方式
2、共享内存并未提供同步机制,多进程竞争同个共享资源会造成数据混乱
3、共享内存生命周期是随内核的,不是随进程的,程序员必须释放。
socketSocket 实际上不仅用于不同的主机进程间通信,还可以用于本地主机进程间通信,可根据创建 Socket 的类型不同,分为三种常见的通信方式,一个是基于 TCP 协议的通信方式,一个是基于 UDP 协议的通信方式,一个是本地进程间通信方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值