声明:以下内容为学习小林Coding图解网络的学习笔记,详情请关注小林Coding进行学习
管道:分为匿名管道和命名管道,前者只能进行父子进程之间的通信,后者可以进行两个不相关的进程通信。管道的通信是单向的,大小受限,通信效率低,不适合进程之间频繁的数据交换(可以理解为进程A往管道中写入数据,必须等到管道B取出了数据,进程A才能继续执行),它的优点是实现简单
消息队列:消息队列可以解决管道传输效率低的问题,A 进程要给 B 进程发送消息,A 进程把数据放在对应的消息队列后就可以正常返回了,B 进程需要的时候再去读取数据就可以了。
缺点:1.消息队列不适合⽐较⼤数据的传输,内核对消息体有大小的限制。
2.消息队列通信过程中,存在⽤户态与内核态之间的数据拷⻉开销,因为进程写⼊数据到内核中的消息队列时,会发⽣从⽤户态拷⻉数据到内核态的过程,同理另⼀进程读取内核中的消息数据时,会发⽣从内核态拷⻉数据到⽤户态的过程
共享内存:通过共享内存进行进程通信,数据不需要进行用户态和内核态之间的拷贝,它的机制就是拿出⼀块虚拟地址空间来,映射到相同的物理内存中,一个进程写入的东西,对其它进程是马上就能见到了,大大提高了进程之间的通信速度
缺点:如果多个进程同时修改共享资源,就会发生冲突,为了防止这种冲突,需要保护机制,所以引入了信号量
信号量: 对共享内存提供保护,在同一时刻,只能有一个进程可以修改共享变量
信号: 信号是进程间唯一的异步通信方式,可以在任意时刻向进程发送一个信号,进程可以捕捉或者忽略信号,当捕捉到信号后会执行默认操作(操作系统中每种信号都对应了一种操作)
Socket:用于实现不同主机之间的进程通信