Linux之sched_setscheduler调度策略总结(六十)

news2025/1/19 23:17:22

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解Linux之sched_setscheduler调度策略用法。

2.Linux之sched_setscheduler调度策略介绍

  • 在Linux操作系统中,sched_setscheduler函数用于设置进程的调度策略和优先级。它属于调度器(scheduler)相关的函数,可用于控制进程在系统中的调度行为。

函数原型如下:

int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);

参数说明:

  • pid:要设置调度策略的进程的进程ID,如果pid为0,则表示当前进程。
  • policy:调度策略,可以是以下值之一:
    • SCHED_OTHER:普通时间共享调度策略
    • SCHED_FIFO:先进先出调度策略
    • SCHED_RR:轮转调度策略
    • SCHED_BATCH:批处理调度策略
    • SCHED_IDLE:空闲调度策略
  • param:结构体指针,包含与特定调度策略相关的参数。

返回值:

  • 成功时,返回0;
  • 失败时,返回-1,并设置errno来指示错误类型。

注意事项:

  • 只有具有足够权限(例如具有root权限)的进程才能成功调用sched_setscheduler函数。
  • 调用此函数会仅影响调用进程本身,而不会影响其他进程。

sched_setscheduler函数的作用是根据给定的调度策略和优先级设置进程的调度方式。它可以用于调整进程在系统中的调度优先级,并影响进程在CPU上的执行顺序。调度策略可以根据进程的需求选择合适的调度算法,不同的调度策略会影响进程的响应性、公平性和实时性。

需要注意的是,对于实时进程,例如使用SCHED_FIFO或SCHED_RR策略的进程,优先级较高的进程将优先执行,直到它完成或主动让出CPU。而对于普通进程,使用SCHED_OTHER策略的进程将遵循时间片轮转调度算法,按照一定的时间片轮流执行。

总结:sched_setscheduler函数用于设置进程的调度策略和优先级,允许开发者对进程进行精确的调度控制,以满足不同应用场景的需求。

3.代码实例

1.将当前进程设置为SCHED_OTHER调度策略

#include <iostream>
#include <sched.h>

int main() {
    struct sched_param param;
    int ret = sched_setscheduler(0, SCHED_OTHER, &param);
    if (ret == -1) {
        std::cout << "Failed to set scheduler!\n";
    } else {
        std::cout << "Successfully set scheduler to SCHED_OTHER\n";
    }
    return 0;
}

2.将当前进程设置为SCHED_FIFO调度策略

#include <iostream>
#include <sched.h>

int main() {
    struct sched_param param;
    int ret = sched_setscheduler(0, SCHED_FIFO, &param);
    if (ret == -1) {
        std::cout << "Failed to set scheduler!\n";
    } else {
        std::cout << "Successfully set scheduler to SCHED_FIFO\n";
    }
    return 0;
}

3.将当前进程设置为SCHED_RR调度策略

#include <iostream>
#include <sched.h>

int main() {
    struct sched_param param;
    int ret = sched_setscheduler(0, SCHED_RR, &param);
    if (ret == -1) {
        std::cout << "Failed to set scheduler!\n";
    } else {
        std::cout << "Successfully set scheduler to SCHED_RR\n";
    }
    return 0;
}

4.将当前进程设置为SCHED_BATCH调度策略

#include <iostream>
#include <sched.h>

int main() {
    struct sched_param param;
    int ret = sched_setscheduler(0, SCHED_BATCH, &param);
    if (ret == -1) {
        std::cout << "Failed to set scheduler!\n";
    } else {
        std::cout << "Successfully set scheduler to SCHED_BATCH\n";
    }
    return 0;
}

5.将当前进程设置为SCHED_IDLE调度策略

#include <iostream>
#include <sched.h>

int main() {
    struct sched_param param;
    int ret = sched_setscheduler(0, SCHED_IDLE, &param);
    if (ret == -1) {
        std::cout << "Failed to set scheduler!\n";
    } else {
        std::cout << "Successfully set scheduler to SCHED_IDLE\n";
    }
    return 0;
}

6.将指定进程设置为SCHED_OTHER调度策略

#include <iostream>
#include <sched.h>

int main() {
    pid_t pid = 1234; // 要设置调度策略的进程ID
    struct sched_param param;
    int ret = sched_setscheduler(pid, SCHED_OTHER, &param);
    if (ret == -1) {
        std::cout << "Failed to set scheduler for process " << pid << "!\n";
    } else {
        std::cout << "Successfully set scheduler to SCHED_OTHER for process " << pid << "\n";
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMake:探究编译和编译命令

CMake:探究编译和编译命令 导言项目结构相关源码结果 导言 本篇通过展示如何使用来自对应的Check<LANG>SourceCompiles.cmake标准模块的check_<lang>_source_compiles函数&#xff0c;以评估给定编译器是否可以将预定义的代码编译成可执行文件。该命令可帮助确定:…

Idea 对容器中的 Java 程序断点远程调试

第一种&#xff1a;简单粗暴型 直接在java程序中添加log.info()&#xff0c;根据需要打印信息然后打包覆盖&#xff0c;根据日志查看相关信息 第二种&#xff1a;远程调试 在IDEA右上角点击编辑配置设置相关参数在Dockerfile中加入 "-jar", "-agentlib:jdwp…

数据库连接池大小的调整原则

配置连接池是开发人员经常犯的错误。配置池时需要理解几个原则&#xff08;对于某些人来说可能违反直觉&#xff09;。 想象一下&#xff0c;您有一个网站&#xff0c;虽然可能不是 Facebook 规模的&#xff0c;但仍然经常有 10,000 个用户同时发出数据库请求&#xff0c;每秒…

4.RDD编程指南

概述 spark 提供的重要的抽象是一个 弹性分布式数据集(RDD) &#xff0c;能被并行操作的&#xff0c;在集群上分区的集合元素。RDDs 可以通过 hadoop 文件(或共它的 hadoop 支持的文件系统)&#xff0c;或者编程中的 scala 集合&#xff0c;转换它创建 RDD。用户还可以要求 sp…

【Linux】:基础IO

基础IO 一.C语音文件操作1.fopen2.fwrite3.fopen以a方式打开 二.Linux下一切皆文件三.系统调用接口四.文件描述符-fd 共识原理&#xff1a; 1.文件属性内容。 2.文件分为打开文件和未打开文件。 3.打开的文件&#xff1a;进程打开。 4.未打开的文件&#xff1a;在磁盘里存放着。…

在Node.js中,什么是中间件(middleware)?它们的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

企业中台如何进行测试(下篇)

《企业中台如何进行测试》包含了主数据治理测试、统一认证测试、业务集成测试、门户建设测试、数据分析测试等内容。由于篇幅较长&#xff0c;将分为上、下两个篇章与大家分享&#xff0c;在上篇主要从主数据治理和统一认证两个方面对企业中台的测试内容进行介绍&#xff0c;下…

Visual Studio Code 常用快捷键大全

Visual Studio Code 常用快捷键大全 快捷键是编码过程中经常使用&#xff0c;且能够极大提升效率的部分&#xff0c;这里给大家介绍一些VS Code中非常有用的快捷键。 打开和关闭侧边栏 Mac — Command B Windows — Ctrl B Ubuntu — Ctrl B 选择单词 Mac — Command D …

洗衣洗鞋柜洗衣洗鞋小程序

支持&#xff1a;一键投递、上门取衣、自主送店、多种支付方式 TEL: 17638103951(同V) -----------------用户下单-------------- -------------------------多种支付和投递方式------------------------- -----------------商家取鞋--------------

基于冠状病毒群体免疫算法的无人机航迹规划-附代码

基于冠状病毒群体免疫算法的无人机航迹规划 文章目录 基于冠状病毒群体免疫算法的无人机航迹规划1.冠状病毒群体免疫搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用冠状病毒群体…

从关键新闻和最新技术看AI行业发展(2023.10.9-10.22第八期) |【WeThinkIn老实人报】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&…

测试总结模板

​​​​​​​ ​​​​​​​ ​​​​​​​ xx电力工作计划管理系统 系统测试总结 评审核准单 时间 作者 工作内容 版本 确认人 确认时间 2007/11/6 姜全尧 创建延边电力工作计划管理系统测试总结 1.0 …

二叉树OJ题(用前序和中序遍历构建二叉树,用中序和后续遍历构建二叉树)

文章目录 二叉树OJ题一、用前序和中序遍历构建二叉树1.思路2.代码 二、用中序和后续遍历构建二叉树1.思路2.代码 二叉树OJ题 一、用前序和中序遍历构建二叉树 1.思路 1.根据前序遍历找到根结点root 2.在中序遍历中&#xff08;inBegin0和inEndelem.length-1范围之间&#xff09…

老外总结的14条Go接口最佳实践

最近几个月&#xff0c;没事喜欢看看老外写的技术文章&#xff0c;发现他们的一些思考维度真的有些不太一样。当然&#xff0c;他们写的文章大多数没有国内的那么卷。 今天这篇文章是关于Go语言中接口设计的一些最佳实践&#xff0c;与Java等语言不尽相似&#xff0c;但又带着…

Linux常用命令——chcon命令

在线Linux命令查询工具 chcon 修改对象&#xff08;文件&#xff09;的安全上下文 补充说明 chcon命令是修改对象&#xff08;文件&#xff09;的安全上下文&#xff0c;比如&#xff1a;用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用--ref…

Ubuntu连不上WiFi 或者虽然能连上校园网,但是浏览器打不开登录页面

写在前面 自己的电脑环境&#xff1a; Ubuntu20.04 一、问题描述 自己的 Ubuntu 遇到连接不上 除校园网之外的其他WiFi, 或者 虽然能连上校园网&#xff0c;但是浏览器打不开登录页面的问题。 二、解决方法 出现这种问题的原因可能是 之前开过VPN, 导致系统的网络设置出现…

上海亚商投顾:创业板指高开低走 传媒、游戏板块逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡调整&#xff0c;创业板指尾盘跌超1%。传媒、游戏板块逆势大涨&#xff0c;百纳千成、天龙集…

浮动模块布局

基本思路 若宽度和浏览器一样宽&#xff0c;则不需要设置width 一般父盒子使用标准流&#xff0c;然后标准流内使用浮动 一般父盒子需要居中显示&#xff0c;使用 margin: 0 auto; 注意浮动盒子之间的margin值 与 父盒子width、height值之间的相等关系&#xff0c;一定要计算…

APUS成为深圳市人工智能行业协会理事单位,CEO李涛受聘专家

近日&#xff0c;APUS正式成为深圳市人工智能行业协会理事单位&#xff0c;APUS董事长兼CEO李涛同时受聘为协会专家委员会专家。 深圳市人工智能行业协会成立于2017年&#xff0c;由电子通信、大数据、计算机视觉、自然语言处理等AI相关领域企事业单位组成&#xff0c;致力于加…

Goland 对容器中的 Go 程序断点远程调试

1&#xff0c;针对 golang 程序打断点有哪几种情况 临时进程&#xff1a;针对临时运行一次的 Golang 脚本&#xff0c;比如定时统计脚本&#xff0c;定时推送脚本。常驻进程&#xff1a;针对一直在后台运行的 Golang 程序&#xff0c;比如 HTTP 或者 GRPC 服务。 我们现在假设…