news 2026/4/28 18:22:31

Linux 线程调度策略详解:SCHED_OTHER、SCHED_FIFO、SCHED_RR

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 线程调度策略详解:SCHED_OTHER、SCHED_FIFO、SCHED_RR

在 Linux POSIX 线程编程中,调度策略直接决定了线程如何竞争 CPU 资源,也是面试与嵌入式、实时开发中的高频考点。本文从原理、特点、适用场景到代码示例,彻底讲清楚三种调度策略:SCHED_OTHER、SCHED_FIFO、SCHED_RR


一、基础概念

Linux 把调度策略分为两大类:

  • 普通调度策略SCHED_OTHER(系统默认)
  • 实时调度策略SCHED_FIFOSCHED_RR

优先级规则:

  • 实时策略优先级:1 ~ 99,数值越大优先级越高
  • 普通策略优先级:固定为 0
  • 任何实时线程 > 普通线程,只要有实时线程可运行,普通线程会被完全抢占

二、SCHED_OTHER(默认分时调度)

特点

  • 非实时、公平分时调度
  • 优先级固定为 0,不能修改
  • 依赖nice值调整权重,值越小越优先
  • 由 CFS 公平调度器管理,不会饿死线程
  • 适合绝大多数普通应用

适用场景

业务逻辑、后台服务、GUI 程序、普通计算任务等对响应时间不敏感的场景。


三、SCHED_FIFO(实时先进先出)

特点

  • 实时调度,无时间片
  • 一旦占用 CPU,除非阻塞、被更高优先级抢占或主动退出,否则绝不释放
  • 同优先级线程:先来先服务,不主动切换
  • 高优先级线程可完全抢占低优先级线程

注意

  • 多核环境下,不同核心可同时运行不同优先级线程
  • 必须绑定到同一核心,才能观察到严格的独占效果

适用场景

工控、实时采集、硬实时任务,要求极低延迟。


四、SCHED_RR(实时时间片轮转)

特点

  • 实时调度,带时间片(默认约 100ms)
  • 高优先级依旧抢占低优先级
  • 同优先级线程轮流执行,时间片用完自动切换
  • 不会像 FIFO 那样被单个线程独占 CPU

适用场景

音视频、实时数据处理、多路实时任务,既要求实时性又希望公平。


五、三种策略核心对比

表格

策略类型优先级时间片同优先级调度抢占特性
SCHED_OTHER普通0公平轮转
SCHED_FIFO实时1-99不切换,独占强抢占
SCHED_RR实时1-99时间片轮转强抢占

六、关键知识点总结

  1. sleep、printf、锁、IO 都会阻塞线程并释放 CPU,会让低优先级线程获得运行机会。
  2. 多核 CPU上不同核心可同时运行不同优先级线程,想观察抢占必须绑核。
  3. SCHED_FIFO 同优先级:谁先运行谁独占,另一个线程完全不运行。
  4. SCHED_RR 同优先级:轮流运行,自动切换,公平不卡死。
  5. 实时线程必须使用root权限运行。

七、简单示例:SCHED_RR 同优先级轮转

c

运行

#define _GNU_SOURCE #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <sched.h> void *funcA(void *arg) { while (1) { printf("A "); } } void *funcB(void *arg) { while (1) { printf("B "); } } int main() { pthread_t tidA, tidB; pthread_attr_t attrA, attrB; struct sched_param param; pthread_attr_init(&attrA); pthread_attr_init(&attrB); // 调度策略 RR pthread_attr_setschedpolicy(&attrA, SCHED_RR); pthread_attr_setschedpolicy(&attrB, SCHED_RR); // 同优先级 90 param.sched_priority = 90; pthread_attr_setschedparam(&attrA, &param); pthread_attr_setschedparam(&attrB, &param); pthread_attr_setinheritsched(&attrA, PTHREAD_EXPLICIT_SCHED); pthread_attr_setinheritsched(&attrB, PTHREAD_EXPLICIT_SCHED); pthread_create(&tidA, &attrA, funcA, NULL); pthread_create(&tidB, &attrB, funcB, NULL); pthread_join(tidA, NULL); pthread_join(tidB, NULL); return 0; }

编译运行:

bash

运行

gcc sched_rr.c -o rr -pthread sudo ./rr

运行效果:A、B 按时间片交替批量打印。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 8:01:58

QMCDecode终极指南:三步破解QQ音乐加密格式,免费实现音乐自由

QMCDecode终极指南&#xff1a;三步破解QQ音乐加密格式&#xff0c;免费实现音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录…

作者头像 李华
网站建设 2026/4/11 7:59:07

将GPT OSS私有部署推理性能提升100倍的部署教程(下)

部署 GPT OSS 模型确认模型下载完成后&#xff0c;点击已下载模型右侧的部署按钮&#xff0c;部署模型。在部署页面&#xff0c;展开高级配置&#xff0c;设置模型类别为 LLM。并在后端版本中&#xff0c;填写自定义后端版本为 0.10.1gptoss&#xff0c;GPUStack 会自动调用 /v…

作者头像 李华
网站建设 2026/4/11 7:58:06

2026贵州公考面试机构怎么选

备考贵州省考事业单位面试&#xff0c;选对机构少走弯路&#xff01;对比了3家本土机构后&#xff0c;真心觉得初心教育是不二之选&#xff0c;今天从师资、通过率、教研三个维度&#xff0c;给大家做个真实测评&#xff0c;帮大家避坑&#xff01;首先看师资&#xff0c;这是我…

作者头像 李华
网站建设 2026/4/11 7:55:52

qmcdump:三分钟快速解锁QQ音乐加密文件的终极指南

qmcdump&#xff1a;三分钟快速解锁QQ音乐加密文件的终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾经…

作者头像 李华