面试题答案
一键面试常见线程并发执行调度策略
- 先来先服务(FCFS, First-Come, First-Served)
- 特点:按照线程到达的先后顺序进行调度,先进入等待队列的线程先被执行。实现简单,不需要额外的计算资源来进行调度决策。但这种策略没有考虑线程的执行时间和优先级等因素,如果有一个长任务先到达,会导致后面的短任务等待很长时间。
- 适用场景:适用于对响应时间要求不高,任务执行时间大致相同的场景,比如一些批处理系统。
- 短作业优先(SJF, Shortest Job First)
- 特点:优先调度预计执行时间最短的线程。这种策略可以使平均等待时间最小化,提高系统的整体效率。然而,它需要预先知道每个线程的执行时间,这在实际中往往很难做到,并且可能导致长任务饥饿,即长任务长时间得不到执行机会。
- 适用场景:在能较为准确预估任务执行时间,且对系统整体效率要求较高的场景中适用,如某些实时系统中对已知时长的小任务调度。
- 优先级调度
- 特点:为每个线程分配一个优先级,调度程序优先选择优先级最高的线程执行。可以根据任务的重要性或紧急程度来设置优先级。但如果不采取额外措施,低优先级线程可能会出现饥饿现象。
- 适用场景:适用于有明显任务优先级区分的场景,例如在操作系统中,系统任务通常会被赋予较高优先级,以保证系统的稳定运行;在一些实时控制系统中,紧急任务优先级高。
- 时间片轮转(RR, Round Robin)
- 特点:将CPU的处理时间划分成固定长度的时间片,每个线程轮流获得一个时间片来执行。当时间片用完后,无论线程是否执行完毕,都会被暂停并放到等待队列末尾,等待下一次调度。这种策略能保证每个线程都有机会执行,提供了相对公平的调度方式,避免了线程饥饿。但如果时间片设置过小,会导致线程上下文切换频繁,增加系统开销;时间片设置过大,则会退化为类似FCFS的策略,失去公平性。
- 适用场景:适用于交互式系统,如桌面操作系统,能让每个用户进程都及时得到响应,保证用户体验。
- 多级反馈队列调度
- 特点:综合了多种调度策略的优点。系统中设置多个不同优先级的就绪队列,新线程首先进入最高优先级队列,按时间片轮转方式执行。如果在一个时间片内没有执行完,该线程会被移到下一级队列,优先级降低。队列级别越低,时间片越长。高优先级队列中的线程具有优先执行权,只有当高优先级队列中没有线程时,才会调度低优先级队列中的线程。这种策略既照顾了短任务的快速执行,又能保证长任务最终得到执行,同时对交互式任务有较好的响应。
- 适用场景:广泛应用于现代操作系统中,能较好地适应不同类型任务的需求,平衡系统的各种性能指标,如吞吐量、响应时间等。