Binder机制

108 阅读3分钟

多进程优点

  1. App内存扩展
  2. 风险隔离

进程间通信方式比较

Linux 进程间通信包括: 管道、信号量、socket、共享内存

Binder共享内存socket
性能需要拷贝一次内存无需拷贝需要拷贝两次内存
特点基于C/S架构 易用性高控制复杂、易用性差基于C/S架构、传输效率低,开销大
安全性为每个app分配UID 同时支持实名和匿名依赖上层协议 访问接入点是开放的不安全依赖上层协议 访问接入点是开放的不安全

内存拷贝解释

一般的进程间通信: image.png Binder进程间通信:

image.png

mmap

一种内存映射文件的方法。将一个文件或其他对象映射为进程的地址空间,实现文件磁盘地址和进程虚拟内存地址的一一对应关系。

实现这样的映射之后,进程既可以采用指针方式去操作这段内存空间即可,无需再调用read write系统函数去操作磁盘,系统会自动回写脏页面到对应磁盘上。相应的,内核空间对该区域的修改也可以直接反映到用户空间。

简而言之:mmap将磁盘文件映射到进程内存空间中,进程可以直接通过操作内存来操作文件。内存中对数据的修改,磁盘中对应文件也会同步修改;相反磁盘文件内容修改,内存中数据也会有相应修改。不同进程mmap映射到同一个文件时,就可以实现进程间通信。

优点:

1、对文件的读取操作跨过了页缓存,减少了数据的拷贝次数,用内存读写取代I/O读写,提高了文件读取效率。 (正常的文件操作需要两次数据拷贝,1.用户空间copy至内核空间 2.内核空间copy至磁盘)

2、实现了用户空间和内核空间的高效交互方式。两空间的各自修改操作可以直接反映在映射的区域内,从而被对方空间及时捕捉。

3、提供进程间共享内存及相互通信的方式。不管是父子进程还是无亲缘关系的进程,都可以将自身用户空间映射到同一个文件或匿名映射到同一片区域。从而通过各自对映射区域的改动,达到进程间通信和进程间共享的目的。

4、可用于实现高效的大规模数据传输。内存空间不足,是制约大数据操作的一个方面,解决方案往往是借助硬盘空间协助操作,补充内存的不足。但是进一步会造成大量的文件I/O操作,极大影响效率。这个问题可以通过mmap映射很好的解决。换句话说,但凡是需要用磁盘空间代替内存的时候,mmap都可以发挥其功效。

参考:www.cnblogs.com/huxiao-tee/…