gpt4 book ai didi

java - Android中可以发生优先级倒置吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:37 27 4
gpt4 key购买 nike

优先级倒置是一个在线程/进程调度期间可能发生的问题,由于与它们相关联的优先级。

Priority inversion is a problematic scenario in scheduling in which a high priority task is indirectly preempted by a medium priority task effectively "inverting" the relative priorities of the two tasks - Wikipedia

我想知道,Android 中是否会发生优先级反转,因为我们知道 Android 提供具有不同优先级的不同进程see this post .我们还可以创建多个具有不同优先级的线程(在 Activity 和服务中),它们如何适应这种情况?我看到一篇文章谈论 Thread Scheduling in Android .如果发生优先级倒置,我们如何检测和避免?

当我在寻找这个问题的答案时,我找到了this Android 的页面,它告诉我们如何在 Android 的音频系统上下文中避免优先级反转。

最佳答案

简短的回答

,Android 中可能会发生优先级反转,详见 link你提供的。

问题

任何允许具有不同优先级的任务锁定同一共享资源的系统都容易受到优先级反转的影响,除非采取措施来防止它。您提到了线程和进程 - 在 Android 中,状态可以在进程和线程之间共享,这使得它们都容易受到优先级反转的影响。

优先级反转带来的主要问题是较低优先级的任务被赋予较少的 CPU 周期来执行。如果一个时间敏感的高优先级任务被一个低优先级任务阻塞,它可能不得不等待一段 Not Acceptable 长时间来执行,这可能会导致系统某处出现故障或降低用户体验。

传统解决方案

对此的传统解决方案是优先级继承。通过优先级继承,持有共享资源的任务(线程或进程)将暂时继承阻塞在该资源上的最高优先级任务的优先级。这解决了问题,因为低优先级任务的执行速度要快得多,从而为时间敏感的任务释放资源。

具有此功能的 Futexes(快速用户空间互斥锁)在 Linux 内核中可用。但是,由于 security concerns,它们在 Android 标准 C 库中可用。并且因为它们涉及大量开销。

Android 解决方案

Android 开源项目 recommends处理优先级反转问题的几种不同方法。

  • “try lock”/lock with timeout - 对低优先级任务可以持有互斥体的时间强制执行一些超时期限,使高优先级任务更有可能及时获得访问权限。缺点是如果有一系列不相关的低优先级任务具有较长的累积超时。
  • 在某些情况下,互斥锁或其他同步原语可以由一组适当的原子操作以及对称多处理来代替。提供了这方面的指南 here .
  • 您还可以实现无锁单读取器、单写入器 FIFO 任务队列。这是描述herehere .

所有这些方法的共同基本主题是最大限度地减少高优先级和低优先级 rask 之间共享的资源锁的数量,或者如果它们确实无法删除则减轻它们的影响。目前,这些技术都在 Android 中使用,以减少优先级反转问题。

检测

很难在优先级反转发生之前自动检测到它。如果您怀疑它正在发生,您可以使用 systraceps -t -p 等工具来检验您的假设,以检查不同进程执行和阻塞所花费的时间.最好的建议是充分了解您正在处理的系统的不同部分,以及优先级反转问题。

关于java - Android中可以发生优先级倒置吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32853088/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com