android binder入门(三)——设计原理和模型介绍

1、优势

android是在Linux基础上进行开发出的一套系统,Linux进程间通信包括几种方式:共享内存、管道、socket、消息队列、binder。
共享内存:优点就是无需进行拷贝数据,客户端和服务端都可以直接对内存中的数据进行操作,这样操作读取速度很快,但是需要很大的内存,并且安全性无法保证,任何app都可以操作这部分数据,导致数据很乱
管道、socket、消息队列:操作过程都是,服务端先将数据copy到内核缓存区,客户端需要数据操作的时候,也要将内核缓存区的数据copy到自己的内存空间内,这就进行了两次copy,消耗性能很大,尤其是android手机,对性能要求更高,完全不符合标准
在这里插入图片描述

binder:copy数据就是介于上面两者之间,服务端将内存中的数据copy到内核缓存区,同时对外提供操作的地址映射,客户端就可以通过映射对数据进行操作,无需copy到自己的内存空间,这样就进行了一次copy,节约了性能。并且ServiceManager给每个binder设置了一个标志UID,保证了只能访问对应id的binder,保证了数据的安全性。
在这里插入图片描述
所以android系统才选择了binder作为IPC进程间的通信方式。

2、通信模型

在这里插入图片描述

目前只能是拾人牙慧,进行简单的介绍一下,至于内部具体的很多问题,目前都不是很了解,尤其是深入的c语言的实现还需要继续去学习了。binder机制学习还是很消耗时间的,并且很枯燥。
感谢网上大佬的奉献,参考:
https://zhuanlan.zhihu.com/p/35519585
http://www.noobyard.com/article/p-cgpcokmh-ms.html