进程间通信方式:分类、区别、优缺点、使用场景
分类 | 特点 | 具体通信方式 |
---|---|---|
低级通信 | 控制信息的传送 | 信号 |
高级通信 | 与大批数据传送 | 管道、消息队列、共享内存、套接字 |
通信方式 | 介绍 | 区别 | 优缺点 | 使用场景 |
---|---|---|---|---|
管道pipe | 两种限制, 一是半双工,只能单向传输; 二是只能在父子进程间使用. |
优:无名管道简单方便 缺:单项传输、只父子进程 |
只能在具有亲缘关系的进程间使用.一般指的是父子关系.管道一般用于两个不同进程之间的通信. | |
流管道 | 双向传输. 只能在父子进程间使用 |
只能在父子进程间使用 | ||
有名管道 | 单向传输; 可以在许多并不相关的进程之间进行通讯. |
优点:可以提供给任意关系的进程使用. 缺点:由于其长期存在于系统之中,使用不当容易出错.所以普通用户一般不建议使用 |
允许无亲缘关系进程间的通信 | |
信号(Signal) | 由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。 | 优点:触发某些行为 缺点:传递信息少 |
用户传递的信息较少;用于通知接收进程某个事件已经发生;发送信号给进程本身 | |
信号量(semaphore) | 是一个特殊的变量,它的本质是计数器,信号量里面记录了临界资源的数目,有多少数目,信号量的值就为多少,进程对其访问都是原子操作(pv操作,p:占用资源,v:释放资源)。 它的作用就是,调协进程对共享资源的访问,让一个临界区同一时间只有一个进程在访问它。 主要作为进程间以及同一进程不同线程之间的同步手段 |
信号是通知进程产生了某个事件, 信号量是用来同步进程的 |
用于多线程之间的同步,常与共享内存配合使用 | |
消息队列 (Message) | 消息队列是消息的链接表,包括Posix消息队列systemV消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。 允许任意进程通过共享消息队列来实现进程间通信.并由系统调用函数来实现消息发送和接收之间的同步.从而使得用户在使用消息缓冲进行通信时不再需要考虑同步问题 |
消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点 | 优点:不再局限于父子进程,不再需要考虑同步问题.使用方便 缺点:消息队列中信息的复制需要额外消耗CPU的时间.不适宜于信息量大或操作频繁的场合。 |
消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点. UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程. |
共享内存 | 使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。 往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。 |
共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息 | 优点:无须复制,快捷、信息量大 缺点:1、通过将共享的内存缓冲区直接附加到进程的虚拟地址空间中来实现的.因此,这些进程之间的读写操作的同步问题操作系统无法实现。必须由各进程利用其他同步工具解决 2、由于内存实体存在于计算机系统中.所以只能由处于同一个计算机系统中的诸进程共享,不方便网络通信 |
与其他通信机制,如信号量,配合使用,来实现进程间的同步与通信 |
套接口(Socket)🌟 | 对于网站,通信模型是服务器与客户端之间的通信。两端都建立了一个 Socket 对象,然后通过 Socket 对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。 | 用于不同进程及其间进程的通信 ;不同计算机之间的通信 |
不同问法都是围绕其特点说。
外:
socket通信、http、TCP有什么关系?https://www.cnblogs.com/leftJS/p/11082910.html 待整理
我理解是,socket在tcp外套了个壳,可以保持长连接
——————————————————————————————————————————————————————————————————————————
本文作者:蜘蛛酱的网络
关于博主:评论和私信会在第一时间回复。或者直接私信我。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.