进程间通信简介(一)
2016-01-27 16:12
197 查看
IPC(Inter-process communication)进程间通信,进程间通信包括同一设备上的不同进程和不同设备上的不同进程。不同设备上的不同进程通信就涉及到网络。
进程间通信有几种稳定、有效的的方式几乎被所有的操作系统采用:共享内存(Shared Memory)、管道(Pipe)、Unix Domain Socket和 RPC(Remote Procedure Calls 远程调用)。
(共享内存) 例子一:进程一与进程二通过“共享内存”通信
step1:进程一在内存中申请一块共享区域,申请的共享区域与某个特定key绑定。
step2:将共享区域映射到进程一的空间(这样才能进一步操作)。
step3:进程二调用api通入同一个key将共享区域映射到进程二。
step4:对共享区域读写进程信息交换。
step5:完成通信后,各个进程撤销之前的映射操作
step6:删除共享区域,回收内存。
(管道不做介绍)
(Unix Domain Socket) 我们因为学习TCP/IP协议才接触到Socket。Socket在网络通信领域广泛应用 被称为Network Socket;Socket在同一机器上的进程间通信也是完全能够胜任的,但是执行效率不理想。因此出现了Unix
Domain Socket专门针对单机内的进程间通信。(Network Socket与UDS的区别:前者是以TCP/IP协议栈为基础的,需要分包、重组等一系列操作,而后者的实现机制上不是依赖这些协议的)
(RPC) RPC涉及到的通信双方通常运行于不同的机器中。RPC机制中开发人员不需关心中间传输过程怎样实现。一个完成的通信步骤:
1,客户端进程调用Stub接口。
2,Stub跟操作系统要求打包,并执行系统调用
3,由内核完成与服务端的具体交互。,
4,服务端Stub解包并调用与数据包匹配的进程。
5,进程执行操作
6,服务端逆向将数据返回给客户端。
进程间通信有几种稳定、有效的的方式几乎被所有的操作系统采用:共享内存(Shared Memory)、管道(Pipe)、Unix Domain Socket和 RPC(Remote Procedure Calls 远程调用)。
(共享内存) 例子一:进程一与进程二通过“共享内存”通信
step1:进程一在内存中申请一块共享区域,申请的共享区域与某个特定key绑定。
step2:将共享区域映射到进程一的空间(这样才能进一步操作)。
step3:进程二调用api通入同一个key将共享区域映射到进程二。
step4:对共享区域读写进程信息交换。
step5:完成通信后,各个进程撤销之前的映射操作
step6:删除共享区域,回收内存。
(管道不做介绍)
(Unix Domain Socket) 我们因为学习TCP/IP协议才接触到Socket。Socket在网络通信领域广泛应用 被称为Network Socket;Socket在同一机器上的进程间通信也是完全能够胜任的,但是执行效率不理想。因此出现了Unix
Domain Socket专门针对单机内的进程间通信。(Network Socket与UDS的区别:前者是以TCP/IP协议栈为基础的,需要分包、重组等一系列操作,而后者的实现机制上不是依赖这些协议的)
(RPC) RPC涉及到的通信双方通常运行于不同的机器中。RPC机制中开发人员不需关心中间传输过程怎样实现。一个完成的通信步骤:
1,客户端进程调用Stub接口。
2,Stub跟操作系统要求打包,并执行系统调用
3,由内核完成与服务端的具体交互。,
4,服务端Stub解包并调用与数据包匹配的进程。
5,进程执行操作
6,服务端逆向将数据返回给客户端。
相关文章推荐
- 模仿微信朋友圈 仿微信js-sdk wx.previewImage javascript实现,支持图片预览,滑动切换,双指缩放,图片缓存 h5 html5 js
- 神经网络之激活函数面面观
- 负载
- hdu1115 Lifting the Stone 多边形重心
- HBase & thrift & C++编程
- java对象的内存布局及创建过程
- 二分图模板
- Struct2 或SSH项目中Action返回JSON数据该如何编辑
- redis监控工具-redis sentinel
- ssh框架org.hibernate.InvalidMappingException: Unable to read XML解决方法
- JAVA JDBC 连接Oracle方式详解
- can't creat tcp/ip socket解决办法
- iis7安装php
- 错误400-The request sent by the client was syntactically incorrect
- AngularJS系列:8、表单
- MAC生成公钥私钥
- C#各种数组直接的数据复制/转换
- jdk的一条命令查看运行参数
- android 中的ExpandableListView取消一级图标
- 什么是网站CDN服务,CDN加速原理?