外观
如何理解同步 Binder 的等待链?
标准回答
从客户端的调用区间出发,沿Binder事务关联找到目标进程和处理线程。把时间分为事务到达与排队、服务端执行或等待、回复以及客户端恢复运行。
服务端慢可能是线程池没有空闲线程、持锁执行I/O、嵌套调用另一个服务或自身Runnable排队。客户端可能在等待回复后又被调度延迟。需要两端对齐,避免看到binder transaction长就把所有成本都算给驱动。
可修改接口时考虑减少往返、批量查询、合理缓存或异步接口;仍要处理一致性、结果时效和服务死亡。不能只把调用移到后台,再让主线程等待后台的Future。
追问与回答
Binder线程池满,直接增加线程就好了吗
先查线程为何被占住。若都在争同一把锁或等同一个下游,增加线程可能只增加排队和内存,甚至加剧负载。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q030