传统 Linux 中的 IPC 通信原理:
- 发送进程将需要发送的数据复制到内核空间,也就是 copy_from_user 命令;
- 内核空间将数据从内核缓存区复制到接收进程的用户空间,也就是 copy_to_user 命令;
ㅤㅤ ㅤ ㅤ ㅤ
ㅤ 如下图:
image.png通信一次所需要的成本为数据进行了两次的复制。
ㅤㅤ ㅤ ㅤ ㅤ
Binder 通信原理:
- 内核空间额外开辟出数据接收缓存区的内存,该区域对内核缓存区实现了内存映射;
- 发送进程发送数据时进行一次复制也就是 copy_from_user 命令;
- 因为存在内存映射,此时接收进程通过映射得到了内存缓存区的数据;
如下图:
image.png通信一次所需要的成本为数据进行了一次复制。
ㅤㅤ ㅤ ㅤ ㅤ
ㅤ
结论:
一句话总结就是因为 Binder 只需要复制一次数据,通信成本更低,所以效率更高。下面使用生活中的例子说明:
传统 IPC 通信:
内核缓存区是一个 U 盘,使用 U 盘在两个不同电脑传输文件,需要先把ㅤ”发送进程“ㅤ的文件复制到 U 盘,然后把 U 盘的数据复制到ㅤ”接收进程“ㅤ的电脑。
Binder 机制:
内核缓存区是一个 U 盘,数据接收缓存区是一面可以直接看到 U 盘里面内容的ㅤ”镜子“,或者可以想象成神奇博士里面的传送门。当ㅤ”发送进程“ㅤ电脑把文件复制到 U 盘,“接收进程”ㅤ电脑通过ㅤ”镜子“ㅤ或者ㅤ“传送门”ㅤ可以立刻看到 U 盘里面的数据。
image.pngㅤㅤ ㅤ ㅤ ㅤ
ㅤ
ㅤㅤ ㅤ ㅤ ㅤ
ㅤ
ㅤㅤ ㅤ ㅤ ㅤ
网友评论