配置文件解析
scheduler_conf {
// 1. 设置调度器策略
policy: "classic"
// 2. 设置cpu set
process_level_cpuset: "0-7,16-23" # all threads in the process are on the cpuset
// 3. 设置线程的cpuset,调度策略和优先级
threads: [
{
name: "async_log"
cpuset: "1"
policy: "SCHED_OTHER" # policy: SCHED_OTHER,SCHED_RR,SCHED_FIFO
prio: 0
}, {
name: "shm"
cpuset: "2"
policy: "SCHED_FIFO"
prio: 10
}
]
classic_conf {
// 4. 设置分组,线程组的cpuset,cpu亲和性,调度策略和优先级
// 设置调度器创建"processor"对象的个数,以及协程的优先级。
groups: [
{
name: "group1"
processor_num: 16
affinity: "range"
cpuset: "0-7,16-23"
processor_policy: "SCHED_OTHER"
// policy:
// SCHED_OTHER 默认策略 分时调度策略
// SCHED_RR 实时调度策略 时间片轮转
// SCHED_FIFO 队列 先到先服务策略
processor_prio: 0
tasks: [
{
name: "E"
prio: 0
}
]
},{
name: "group2"
processor_num: 16
affinity: "1to1"
cpuset: "8-15,24-31"
processor_policy: "SCHED_OTHER"
processor_prio: 0
tasks: [
{
name: "A"
prio: 0
},{
name: "B"
prio: 1
},{
name: "C"
prio: 2
},{
name: "D"
prio: 3
}
]
}
]
}
}
根据上面的 conf 文档,可以简单画出任务的优先级拓扑情况,如下图,A、B、C、D 任务在第一个 group 中执行,E在第二个 group 中执行,对于没有出现在配置中的任务,比如F默认会放到第一个 group 中执行(下文会提到哦)。 而且配置中我们对于任务进行了优先级设置,A、B、C、D 的任务优先级依次增大,正好对应下图的拓