自 2026 年起,为了与我们的主干稳定开发模型保持一致,并确保生态系统的平台稳定性,我们将在第 2 季度和第 4 季度将源代码发布到 AOSP。对于构建 AOSP 和向 AOSP 贡献代码,我们建议使用 android-latest-release 而不是 aosp-main。android-latest-release 清单分支将始终引用推送到 AOSP 的最新版本。如需了解详情,请参阅 AOSP 变更。
继承优先级
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
优先级倒置是指优先级较高的事务因优先级较低的任务持有高优先级任务所需的资源而受到延迟的情况。为了缓解优先级反转,Android 支持通过三种不同的优先级继承形式(事务优先级继承、节点优先级继承和实时优先级继承)以不同的优先级运行线程。
本页面介绍了这些不同形式的优先级继承。
事务优先级继承
在进行同步 binder 调用时,高优先级线程可能会被低优先级线程阻塞,直到低优先级线程发送回复。例如,nice 值为 -19 的线程可能会被 nice 默认值为 0 的线程阻塞。
事务优先级继承可解决此问题,因为 binder 驱动程序会暂时更改处理事务的 binder 线程的优先级,使其与调用方的优先级相匹配。当事务完成时,绑定器驱动程序会将绑定器线程的优先级恢复为之前的值。
节点优先级继承
在某些情况下(例如需要低延迟的情况下),异步事务的优先级非常重要。
借助节点优先级继承,您可以配置节点上所有事务应运行的最低优先级。配置节点优先级继承后,节点上的所有事务都将以该最低优先级运行。
节点优先级继承规则如下:
如果交易是同步的,则优先级变为 max(min_node_priority, caller_priority);。
如果事务是异步的,则优先级变为 max(default_priority (nice 0), min_node_priority);。
配置节点优先级继承
如需配置节点优先级继承,请使用 BBinder::setMinSchedulerPolicy。
实时优先级继承
Android 使用实时调度政策(例如 SCHED_FIFO)来确保延迟关键型线程及时完成工作。此外,Android 的一些延迟时间关键型工作会拆分到两个或更多进程中。
实时优先级继承的运作方式与 nice 值完全相同,但有以下区别:
- 实时优先级继承默认处于停用状态。
- 实时优先级值越大,优先级越高。
启用实时优先级继承
必须使用 BBinder::setInheritRt(true) 调用为各个节点启用实时优先级继承。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-12-03。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-12-03。"],[],[]]