操作系统(4)-进程间通信
一、概念
【百度百科】进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。另外,系统空间是“公共场所”,各进程均可以访问,所以内核也可以提供这样的条件。此外,还有双方都可以访问的外设。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。
进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程序而言使用所有的IPC方法是不常见的。
IPC方法包括管道(PIPE)、消息排队、旗语、共用内存以及套接字(Socket)。
进程间通信各种方式效率比较
类型 |
无连接 |
可靠 |
流控制 |
记录 |
消息类型优先级 |
普通PIPE |
N |
Y |
Y |
N |
|
流PIPE |
N |
Y |
Y |
N |
|
命名PIPE(FIFO) |
N |
Y |
Y |
N |
|
消息队列 |
N |
Y |
Y |
Y |
|
信号量 |
N |
Y |
Y |
Y |
|
共享存储 |
N |
Y |
Y |
Y |
|
UNIX流SOCKET |
N |
Y |
Y |
N |
|
UNIX数据包SOCKET |
Y |
Y |
N |
N |
我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!
参考资料: