Linux 自带多种进程通信方式,为什么 Android 都没采用,而偏偏使用 Binder 通信_安卓进程和linux进程(2)

Linux 现有的所有进程间 IPC 方式:

1.管道:
什么是管道:
管道可用于具有亲缘关系进程间的通信,管道是由内核管理的一个缓冲 区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这 个进程会向管道中放入信息。

管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构

以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程 会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放 入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的 时候,管道也自动消失。

缺点: 在创建时分配一个管道时,缓存区大小比较有限;并不适合 Android 大量的进程通信

2.消息队列:
消息队列提供了一种从一个进程向另一个进程发送一个数据块的方 法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有 不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻 塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的 限制。

缺点: 信息复制两次,额外的 CPU 消耗;不合适频繁或信息量大的通信;

3.共享内存:

什么是共享内存:

顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。 共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效 的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以 将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共 享内存中的地址

无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;
缺点: 通信需要设计复杂的机制保证各个进程通讯有效性。进程间的同步 问题操作系统无法实现,必须各进程利用同步工具解决;
安全问题比较 突出,如果 Android 采用 Binder 无异于将每个 App 放在一个内存中,这 样是非常不安全的

**4.套接字:**作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;

**5.信号量:**常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访 问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

6.信号: 不适用于信息交换,更适用于进程中断控制,比如非法内存访问,杀死 某个进程等; 接下来正面回答这个问题,从 5 个角度来展开对 Binder 的分析:
**(1) 从性能的角度 数据拷贝次数:**Binder 数据拷贝只需要一次,而管道、消息 队列、Socket 都需要 2 次,但共享内存方式一次内存拷贝都不需要;从性能角 度看,Binder 性能仅次于共享内存
(2) 从稳定性的角度Binder 是基于 C/S 架构的,简单解释下 C/S 架构,是指客 户端(Client)和服务端(Server)组成的架构,Client 端有什么需求,直接发送给 Server 端去完成,架构清晰明朗,Server 端与 Client 端相对独立,稳定性较好; 而共享内存实现方式复杂,没有客户与服务端之别, 需要充分考虑到访问临界 资源的并发同步问题,否则可能会出现死锁等问题;从这稳定性角度看,Binder 架构优越于共享内存。

仅仅从以上两点,各有优劣,还不足以支撑 google 去采用 binder 的 IPC 机制

(3) 从安全的角度 传统 Linux IPC 的接收方无法获得对方进程可靠的 UID/PID, 从而无法鉴别对方身份;而 Android 作为一个开放的开源体系,拥有非常多的开 发平台,App 来源甚广,因此手机的安全显得额外重要;对于普通用户,绝不希 望从 App 商店下载偷窥隐射数据、后台造成手机耗电等等问题,传统 Linux IPC 无任何保护措施,完全由上层协议来确保。

Android 为每个安装好的应用程序分配了自己的 UID,故进程的 UID 是鉴别进程 身份的重要标志,前面提到 C/S 架构,**Android 系统中对外只暴露 Client 端, Client 端将任务发送给 Server 端,Server 端会根据权限控制策略,判断 UID/PID 是否满足访问权限,目前权限控制很多时候是通过弹出权限询问对话框,让用 户选择是否运行。**Android 6.0,也称为 Android M,在 6.0 之前的系统是在 App 第一次安装时,会将整个 App 所涉及的所有权限一次询问,只要留意看会发现 很多 App 根本用不上通信录和短信,但在这一次性权限权限时会包含进去,让 用户拒绝不得,因为拒绝后 App 无法正常使用,而一旦授权后,应用便可以胡 作非为。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值