先把结论放在前面:Binder 是 Android 内核为进程间通信设计的一套机制,核心是"一次拷贝 + 内核可信中介 + 驱动级身份校验"三件事。常见说法是"Binder 比传统 IPC 快,因为少一次拷贝",这句话方向对但不完整——少一次拷贝只是结果,真正起作用的是接收方的用户空间缓冲区与内核缓冲区通过mmap映射到同一块物理内存,发送方只写一次,接收方直接在自己的地址空间里读。
面试里这题的分档很清楚:能说出"一次拷贝"属于会用;能补出"Binder 驱动 +/dev/binder设备 + ioctl 命令 + 线程池唤醒"这条执行路径,属于真懂原理;能再补一句"为什么 Binder 不能替代共享内存做大数据传输",说明理解它的边界。
三句话说清它的定位
| 维度 | 传统 IPC(Socket/管道) | 共享内存 | Binder |
|---|---|---|---|
| 拷贝次数 | 2 次(发送方写内核、接收方读内核) | 0~1 次 | 1 次 |
| 上下文切换 | 多次 | 少 | 少 |
| 安全校验 | 依赖应用层 | 几乎无</ |