IPC知识点补充

IPC知识点补充

为何需要 IPC?

  • 不同的应用在不同的进程,但是数据通信在某些时候也是必要的,所以说IPC也就这么产生了
  • IPC大部分用于以下情况
  • 分担主进程过重的加载任务 系统给每个进程分配的内存会有限制,如果一个进程占用内存超过了这个内存限制,就会报OOM的问题,很多涉及到大图片的频繁操作或者需要读取一大段数据在内存中使用时,很容易报OOM的问题,分担主进程的压力,将占用内存的某些页面单独开一个进程,多进程,就不可避免地需要使用进程间通信

(思路:进程内存有限制,加载任务过重,多进程,进程间通信)

  • 一个App需要源自于其他App的对应数据,ContentProvider

Binder机制的作用和原理知道吗?

  • 什么是进程隔离?

    进程与进程间内存是不共享的,每个进程分配独立的虚拟机,每个虚拟机都有独立的内存空间地址,所以进程与进程间内存不共享

  • 什么是进程空间划分?

    用户空间,用户运行的空间,内核空间,系统内核运行的空间

    • 什么是系统调用?

    内核态(执行系统调用而陷入内核代码中执行时),用户态(当进程在执行用户自己的代码的时候),如果用户空间需要访问内核空间的话,需要用到系统调用

A进程想要B进程中的某个对象,怎么半?

当 A 进程想要获取 B 进程中的 object 时,驱动并不会真的把 object 返回给 A,而是返回了一个跟 object 看起来一模一样的代理对象 objectProxy,这个 objectProxy 具有和 object 一模一样的方法,但是这些方法没有 B 进程中 object 对象那些方法的能力,这些方法只需要把把请求参数交给驱动即可。

代理对象->无能力->交给驱动

Binder 驱动接收到 A 进程的消息后,发现这是个 objectProxy 就去查询自己维护的表单,一查发现这是 B 进程 object 的代理对象。于是就会去通知 B 进程调用 object 的方法,并要求 B 进程把返回结果发给自己。当驱动拿到 B 进程的返回结果后就会转发给 A 进程,一次通信就完成了。

驱动->查询表单->B进程调用方法->返回结果给Binder->返回结果给A

Binder全面定义一下

  • 进程间的通信:Binder 是一种进程间通信的机制

  • Server:Server 中的 Binder 实体对象

  • Client : Binder 代理对象

  • 传输过程的角度:跨进程传输的对象,完成代理对象和本地对象之间的转换

Binder 的设计思想是什么?

面向对象

Binder 是一个实体位于 Server 中的对象,该对象提供了一套方法用以实现对服务的请求,就象类的成员函数

client中的入口可以看成指向这个binder对象的引用,一旦获得了这个引用就可以调用该对象的方法访问server。

在Client看来,通过Binder‘指针’调用其提供的方法和通过指针调用其它任何本地对象的方法并无区别,尽管前者的实体位于远端Server中,而后者实体位于本地内存中。

Binder 模糊了进程边界淡化了进程间通信过程,整个系统仿佛运行于同一个面向对象的程序之中。


 本篇
IPC知识点补充 IPC知识点补充
IPC知识点补充为何需要 IPC? 不同的应用在不同的进程,但是数据通信在某些时候也是必要的,所以说IPC也就这么产生了 IPC大部分用于以下情况 分担主进程过重的加载任务 系统给每个进程分配的内存会有限制,如果一个进程占用内存超过了
2020-11-27
下一篇 
Java 集合 | 红黑树 | 前置知识 Java 集合 | 红黑树 | 前置知识
为啥要学红黑树吖?因为笔者最近在赶项目的时候,不忘抽出时间来复习 `Java` 基础知识,现在准备看集合的源码啦啦。听闻,`HashMap` 在 `jdk 1.8` 的时候,底层的数据结构发生了变化,变成了数组+链表+红黑树。很好,没了解过红黑树,所以就趁今天闲暇学习一下啦
2020-10-05
  目录