面试题答案
一键面试策略A:引入随机延迟
- 优点:
- 在各种负载下有效:无论是低负载还是高负载系统,都能一定程度缓解活锁问题。在低负载时,随机延迟可避免线程过于“整齐”的执行节奏导致活锁;高负载时,它打乱线程竞争顺序,减少死循环等待的可能性。
- 简单易实现:只需在竞争资源的关键代码段前加入随机延迟代码,无需复杂的系统调度机制改变。
- 公平性较好:不会偏向特定线程,每个线程都有平等机会获取资源,因为延迟是随机的。
- 缺点:
- 性能损耗:随机延迟本身增加了线程等待时间,在高负载系统中可能进一步降低系统整体吞吐量。
- 无法根治活锁:只是降低活锁发生概率,不能完全杜绝。因为即使延迟随机,仍有可能出现线程间的不利竞争组合导致活锁。
- 延迟时间难确定:设置过小可能无法有效避免活锁;设置过大则性能损耗加剧。
策略B:使用优先级调度
- 优点:
- 高负载下高效:在资源竞争激烈的高负载系统中,优先级调度可优先分配资源给重要或紧急任务,提高系统整体性能和响应速度。
- 可针对性优化:根据系统中任务特点,如I/O密集型或计算密集型,合理设置优先级,使系统资源利用更高效。
- 一定程度避免活锁:优先级高的线程优先执行,减少低优先级线程因资源长期被占用而陷入活锁的可能。
- 缺点:
- 可能导致饥饿:低优先级线程可能长时间得不到资源,尤其在高负载且资源竞争激烈时,一直无法执行。
- 系统复杂性增加:需要设计合理的优先级分配算法,且运行时要动态调整优先级,增加了系统设计和维护成本。
- 低负载时效果不佳:在低负载下,优先级调度可能无明显优势,反而因优先级判断和调度操作带来额外开销。
根据系统特性选择策略
- 低负载且对公平性要求高:优先选择策略A,如一些小型后台服务,对系统整体性能影响小,能较好保证公平性且简单易实现。
- 高负载且任务有明显优先级区分:策略B更合适,像大型服务器处理不同类型请求,可按请求类型设置优先级,提升系统整体性能。但要注意避免线程饥饿问题,可结合一定的优先级提升机制。
- 高负载且对公平性有要求:可考虑将两种策略结合,先通过优先级调度提升性能,在竞争资源时引入随机延迟保证一定公平性,降低活锁发生概率。