将 android binder 的性能与 unix-socket 进行比较
Posted
技术标签:
【中文标题】将 android binder 的性能与 unix-socket 进行比较【英文标题】:compare android binder's performance with unix-socket 【发布时间】:2019-08-19 11:39:32 【问题描述】:我使用域套接字和 protobuf 编写了一个 IPC 框架。我在我的 x86 ubuntu 和 anbox 中将 binder 与我的 IPC 框架进行了比较。 当数据大小在 8 byte ~ 4K 之间时,性能没有区别。当数据大小大于 32K 时,我的 IPC Framework 比 binder 好。我认为bidner 传输数据只复制一次,而 domain socket 复制它两次。我该如何解释结果?(anbox应该不会带来性能损失)
【问题讨论】:
您检查了哪个 Binder? Framework Binder 需要编组/解组数据,而 Hardware Binder 不需要。 我选择的Framework binder,虽然需要使用parcel进行marshall和unmarshall数据,但我觉得性能应该不会这样 【参考方案1】:带有AIDL
的Binder 将在复制数据之前对其进行编组和解组。如果您的 IPC 不需要该步骤并复制原始数据,您将获得明显的速度优势。因此,在 android 中复制大量数据通常不通过 Binder 完成。
如果您使用HIDL
和Fast Message Queues 切换到Hardware Binder,情况可能会有所不同。但是,您不能在 Framework Binder 中使用 HIDL
。所以这可能不是你的选择。
【讨论】:
以上是关于将 android binder 的性能与 unix-socket 进行比较的主要内容,如果未能解决你的问题,请参考以下文章