什么是Binder?
一、什么是Binder
Binder,一个通过内存映射实现跨进程通信的东东,Android中一个进程空间分为用户空间和内核空间,其中用户空间数据不可共享,内核空间数据可共享。
因此跨进程通信需要内核空间的支持,传统IPC通信例如管道,Socket等,它们是内核空间的一部分,可以直接拷贝,通过内容提供者进程copy_from_user()拷贝到内核空间,再通过copy_to_user()复制给内容接收方用户空间,实现的进程间通信。
但是Binder不属于Linux内核空间,不能直接进行内核空间的两次拷贝,所以需要借助Linux的动态内核可加载模块机制。
既然有现有的IPC方式,为什么重新设计一套Binder机制呢。主要是出于以上三个方面的考量:
高性能:从数据拷贝次数来看Binder只需要进行一次内存拷贝,而管道、消息队列、Socket都需要两次,共享内存不需要拷贝,Binder的性能仅次于共享内存。
稳定性:上面说到共享内存的性能优于Binder,那为什么不适用共享内存呢,因为共享内存需要处理并发同步问题,控制负责,容易出现死锁和资源竞争,稳定性较差。而Binder基于C/S架构,客户端与服务端彼此独立,稳定性较好。
安全性:我们知道Android为每个应用分配了UID,用来作为鉴别进程的重要标志,Android内部也依赖这个UID进行权限管理,包括6.0以前的固定权限和6.0以后的动态权限,传荣IPC只能由用户在数据包里填入UID/PID,这个标记完全是在用户空间控制的,没有放在内核空间,因此有被恶意篡改的可能,因此Binder的安全性更高。
延伸阅读:
二、传统IPC通信方式
Linux现有的进程通信手段有以下几种:
管道:在创建时分配一个page大小的内存,缓存区大小比较有限; 消息队列:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;
共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;
套接字:作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;
信号量:常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段;
信号: 不适用于信息交换,更适用于进程中断控制,比如非法内存访问,杀死某个进程等。

猜你喜欢LIKE
相关推荐HOT
更多>>
如果有子查询SQL语句的执行顺序是怎么样的?
一、如果有子查询SQL语句的执行顺序是怎么样的1、子查询作为WHERE子句的一部分子查询作为WHERE子句的一部分时,首先会执行子查询,得到结果集后...详情>>
2023-10-20 23:42:56
SQL Server 2014的集成内存OLTP(Hekaton)有什么战略意义?
一、SQL Server 2014的集成内存OLTP(Hekaton)有什么战略意义1、SQL Server本来就是in memory的,任何数据库都会用大量内存去cache磁盘数据,所...详情>>
2023-10-20 18:27:43
Python编程中,如何使用多进程完成多任务进程有哪些注意点?
一、Python编程中,使用多进程完成多任务的方法Python提供了multiprocessing模块,可以用于在单个计算机上创建多个进程,从而实现多任务处理。...详情>>
2023-10-20 12:27:56
一次简单的redis网络请求会有哪些CPU开销?
一、网络连接开销Redis是一个基于客户端-服务端模型的网络应用程序,通过TCP/IP协议进行通信。因此,建立和维护与Redis服务器之间的网络连接会...详情>>
2023-10-20 10:12:38热门推荐
如果有子查询SQL语句的执行顺序是怎么样的?
沸制作大型软件一般选用什么类型的数据库以保护数据安全?
热sql server2000导出CSV文件用EXCEL数据格式出错怎么处理?
热oracle user_segments表的segment_name字段以BIN$开头的是什么?
新MySQL日均10万数据永久保存实现高可用可以采用什么方案?
如何将ABAP时间戳转换为JAVA时间戳,原理是什么?
Django项目中如何配置MySQL数据库?
在mysql中既然where和having都能过滤,为什么用where的多?
CSS3有哪些特性?
SQL Server 2014的集成内存OLTP(Hekaton)有什么战略意义?
用access做一个数据库,用户登录界面,不同用户权限不同,应该怎么设置?
什么是Caché数据库?
flash手机广告动画制作公司使用哪些软件?
文件过多时ls命令为什么会卡住?
技术干货






