MST
星途 面试题库

面试题:操作系统并发与同步下解决活锁问题的策略权衡

在一个多线程并发访问共享资源的系统中,存在可能导致活锁的情况。目前有两种解决策略,策略A是引入随机延迟,策略B是使用优先级调度。请详细分析这两种策略在不同系统负载、资源竞争程度下的优缺点,并说明如何根据系统特性选择合适的策略。
19.5万 热度难度
操作系统并发与同步

知识考点

AI 面试

面试题答案

一键面试

策略A:引入随机延迟

  • 优点
    • 在各种负载下有效:无论是低负载还是高负载系统,都能一定程度缓解活锁问题。在低负载时,随机延迟可避免线程过于“整齐”的执行节奏导致活锁;高负载时,它打乱线程竞争顺序,减少死循环等待的可能性。
    • 简单易实现:只需在竞争资源的关键代码段前加入随机延迟代码,无需复杂的系统调度机制改变。
    • 公平性较好:不会偏向特定线程,每个线程都有平等机会获取资源,因为延迟是随机的。
  • 缺点
    • 性能损耗:随机延迟本身增加了线程等待时间,在高负载系统中可能进一步降低系统整体吞吐量。
    • 无法根治活锁:只是降低活锁发生概率,不能完全杜绝。因为即使延迟随机,仍有可能出现线程间的不利竞争组合导致活锁。
    • 延迟时间难确定:设置过小可能无法有效避免活锁;设置过大则性能损耗加剧。

策略B:使用优先级调度

  • 优点
    • 高负载下高效:在资源竞争激烈的高负载系统中,优先级调度可优先分配资源给重要或紧急任务,提高系统整体性能和响应速度。
    • 可针对性优化:根据系统中任务特点,如I/O密集型或计算密集型,合理设置优先级,使系统资源利用更高效。
    • 一定程度避免活锁:优先级高的线程优先执行,减少低优先级线程因资源长期被占用而陷入活锁的可能。
  • 缺点
    • 可能导致饥饿:低优先级线程可能长时间得不到资源,尤其在高负载且资源竞争激烈时,一直无法执行。
    • 系统复杂性增加:需要设计合理的优先级分配算法,且运行时要动态调整优先级,增加了系统设计和维护成本。
    • 低负载时效果不佳:在低负载下,优先级调度可能无明显优势,反而因优先级判断和调度操作带来额外开销。

根据系统特性选择策略

  • 低负载且对公平性要求高:优先选择策略A,如一些小型后台服务,对系统整体性能影响小,能较好保证公平性且简单易实现。
  • 高负载且任务有明显优先级区分:策略B更合适,像大型服务器处理不同类型请求,可按请求类型设置优先级,提升系统整体性能。但要注意避免线程饥饿问题,可结合一定的优先级提升机制。
  • 高负载且对公平性有要求:可考虑将两种策略结合,先通过优先级调度提升性能,在竞争资源时引入随机延迟保证一定公平性,降低活锁发生概率。