前言
本文整理的有关Android的线程调度策略主要基于Android 9和Android 11版本。众所周知,Android的内核基于Linux,因此也继承了Linux的CPU调度策略,包括cgroup等。对于Android设备终端,CPU的资源是有限的,因此如何管理好这些CPU资源是许多Android OS定制厂商在进行性能优化过程中的重要举措,而Android Framework已经对CPU的资源调度提供了现成方案,包括Cgroup和线程调度策略,本文就以此作为调研对象,阐述Android是如何进行线程调度策略的管理的。
Linux内核的CPU线程调度策略
Linux内核提供了两种类型的CPU线程调度策略,分别是:
(1)实时调度策略:主要的类型有SCHED_FIFO和SCHED_RR,其中SCHED_FIFO表示先到先服务,进程一旦占有CPU,就会一直运行,直到有更高优先级的进程到达时才会放弃CPU或者进程自己放弃CPU;SCHED_RR表示按照时间片轮转,当进程被分配到CPU时间片后才会执行,当该时间片用完后,该进程将会被放到该优先级队列的末尾,等待系统重新分配时间片执行。
线程如果属于上述SCHED_FIFO或者SCHED_RR类型则被称为实时线程(即RT线程),它的线程优先级&