进程间通信

进程间通信主要包括:
1、管道
2、系统IPC(消息队列、信号量、共享存储)
3、套接字

管道包括三种:
1、普通管道PIPE:通常有两种限制,一是半双工,只能单向传输;二是只能在父子或者兄弟进程间使用。
2、流管道s_pipe:去除了第一种限制,可以双向传输。
3、命名管道name_pipe:去除了第二种限制,可以在不相关的进程间通讯。

android采用进程间通信机制:Binder
Binder优势:

管道 System V IPC 套接字 Binder
C|S通信 N N Y Y
拷贝次数 2 2|0 2 1

性能方面
套接字可以建立Client-Server模型,由于手机环境资源稀缺难以保证可靠性。另外其作为一款通用接口,传输效率低,开销大,主要用在跨网络的进程通信和本机上进程>间的低速通信

简单方便
共享内存:其在进程间通信无需拷贝数据,但是控制复杂,难以使用。

安全方便
传统IPC没有任何安全措施,完全依赖上层协议来确保。例如,1、传统IPC的接受方无法获得对方进程的可靠的UID|PID,从而无法鉴别对方的身份。2、传统IPC访问接入>点是开放的,无法建立私有通道。(命名管道的名称、System V 的键值、socket 的ip地址、文件名)

Binder通信模型:
1、使用Client-Server模型,一个进程作为Server提供各种服务(如音视频解码、网络链接),多个进程作为Client向Server发起服务请求,获取需要的服务。
2、Server必须要有可以被Client查询到的地址;必须制定Command-Reply协议来传输数据。
3、Binder可以看成是Server提供的接入点|地址,Client通过Binder向Server发送请求。
4、Binder是一个可以跨进程引用的对象,其实体位于一个进程,引用可以遍布于系统的各个进程,并且可以在进程间传递。

Binder框架定义了四个角色:Server,Client,ServiceManager,Binder驱动。其中Server,Client,ServiceManager运行在用户空间,Binder驱动运行在内核空间。其中
Server 是服务器 通过Binder驱动在ServiceManager注册一个Binder
Client 是客户端 通过Binder驱动向ServiceManager请求Binder引用

ServiceManager 是域名服务器(DNS)有自己的Binder实体(相对其他进程为Client),用于最初的通信
Binder驱动 路由器

Binder通信协议
1、基本格式是 命令+数据

参考链接:http://disanji.net/2011/02/28/android-bnder-design/

原文地址:https://www.cnblogs.com/lipeil/p/3012001.html