2023.02.03

复习进程间通信的7种方式,总结出他们的优点。

一  内核提供的原始通信方式有三种
1、有名管道和无名管道

有名管道和无名管道都属于管道通信,通过在内核空间创建一个特殊的文件(管道文件),一个进程将数据写入管道,另一个进程从管道中读取数据,从而实现通信。管道文件是特殊的文件,不用于存储数据,仅仅只是用来完成进程间数据的交流

无名管道只适用于亲缘进程间的通信,需要在fork之前将管道文件打开,创建子进程后,子进程继承一份管道的文件描述符才能使用该管道。而有名管道既可以用于亲缘进程的通信,也可以用于非亲缘进程的通信

缺点:1、管道文件的操作是一次性的,当从管道中将写入的文件读取出来后,该消息就不存在了

2、管道通信属于一种半双工通信方式,同一时刻,只能由A向B发送数据或者B向A发送数据,要想实现双工,就得创建两个无名管道。

2、信号

1、信号是软件模拟底层硬件的中断操作,中断:打断当前正在进行的事情,去做另一件事

 2、用户可以给某个进程发送信号,一个进程也能给另一个进程发送信号,内核也可以给某个进程发送信号

3、信号是软件实现的,中断是硬件实现的

4、信号是linux内核实现的,没有linux,就没有信号的概念

5、当一个进程收到信号后的操作有三种:默认(一般是杀死进程)、捕获、忽略

优点:实时性高,可用于处理异步事件。

缺点:信号的信息量有限,只能表示事件的发生,无法携带额外的信息。

二 System V提供的三种通信方式
1、消息队列

消息队列允许进程以消息的形式交换信息。每个消息都有一个类型,接收者可以根据类型选择接收的消息。

优点:具有一定的灵活性,可以通过消息类型进行筛选。

缺点:消息队列的大小受到系统参数的限制。

2、共享内存

共享内存的操作不是一次性的,当共享内存段中的数据被读取后,依然存在

优点:共享内存是所有进程间通信方式中效率最高的,原因是,操作共享内存段时,无需进行用户空间和内核空间的切换

缺点:需要手动控制进程之间的同步,否则可能会出现竞态条件。

3、信号量(信号灯集)

信号量是完成多个进程之间同步问题的。信号量可以解决进程或线程间的临界区问题,避免数据不一致。

优点:能有效控制对共享资源的并发访问。

缺点:需要程序员显式地进行控制,使用不当容易造成死锁。

三  套接字通信:socket

套接字可以用于不同机器上的进程间通信,也可以用于同一机器上的进程间通信。套接字支持 TCP 和 UDP 通信协议。

优点:支持跨网络的进程间通信,支持多种通信协议。

缺点:相比于其他本地通信机制,速度稍慢。

你可能感兴趣的:(网络)