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

简介: 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; // 要设置调度策略的进程IDstruct 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.rhkb.cn/news/178643.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式第一课-单例模式(懒汉模式和饿汉模式)

单例模式 个人理解&#xff1a;单例模式实际就是通过类加载的方式获取到一个对象&#xff0c;并且保证这个对象在使用中只有一个&#xff0c;不允许再次被创建 一、懒汉模式 1、懒汉模式的基础写法 代码解释&#xff1a; &#xff08;1&#xff09;、编写LazySingleton类的…

Shiny Server和ShinyProxy是什么,有什么区别?

调研以及参与过多个生物公司的生信工具研发&#xff0c;不管是ShinyServer还是ShinyProxy都有一定研究&#xff0c;尤其是ShinyServer。如果仅是本地化测试想快速的搭建Shiny应用&#xff0c;我推荐用Shiny Server&#xff0c;如果多并发用户且更好的线上管理Shiny应用&#xf…

React Native 样式及其布局

React Native 样式及其布局 参考 https://reactnative.cn/docs/flexbox 一、样式 在 React Native 中&#xff0c;你并不需要学习什么特殊的语法来定义样式。我们仍然是使用 JavaScript 来写样式。所有的核心组件都接受名为style的属性。这些样式名基本上是遵循了 web 上的 …

安全与HTTP协议:为何明文传输数据成为争议焦点?

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、H…

CentOS 搭建 Hadoop3 高可用集群

Hadoop FullyDistributed Mode 完全分布式 spark101spark102spark103192.168.171.101192.168.171.102192.168.171.103namenodenamenodejournalnodejournalnodejournalnodedatanodedatanodedatanodenodemanagernodemanagernodemanagerrecource managerrecource managerjob hist…

2023.10.31 关于 Spring 的基本概念

目录 Spring 容器 对象生命周期 IoC Spring IoC DI Spring Spring 的全称为 Spring Framework&#xff0c;是一个开源的 Java 应用程序框架它提供了一种综合的编程和配置模型&#xff0c;用于构建现代化企业级的应用程序 一句话概括 Spring 是包含了众多工具方法的 IoC …

docker进阶

文章目录 docker 进阶Part1 常用命令总结docker version 查看docker客户端和服务端信息docker info 查看更加详细信息docker images 列出所有镜像基本用法常用选项 docker search 搜索镜像基本用法示例用法 docker pull 拉取镜像基本用法示例用法 docker rmi 删除镜像基本用法示…

FMC子卡解决方案:FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡

FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡 一、板卡概述   基于FMC兼容1.8V IO的Full Camera Link 输出子卡支持Base、Middle、Full Camera link信号输出&#xff0c;兼容1.8V、2.5V、3.3V IO FPGA信号输出。适配xilinx不同型号开发板和公司内部各FMC载板。北…

Macroscope安全漏洞检测工具简介

学习目标&#xff1a; 本介绍旨在帮助感兴趣者尽快了解 Macroscope&#xff0c;这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试&#xff1a; 如下图所示&#xff0c;如果使用多种互补工具&#xff08;SAST/DAST/SCA 等&#xff09;来检测应用程序…

webgoat(A2) Broken Authentication

身份验证绕过 身份验证绕过以多种方式发生&#xff0c;但通常会利用配置或逻辑中的某些缺陷。篡改以达到正确的条件。 隐藏输入 最简单的形式是依赖于网页/DOM 中的隐藏输入。 删除参数 有时&#xff0c;如果攻击者不知道参数的正确值&#xff0c;他们可能会从提交中完全删…

安企神局域网监控软件,员工电脑终端的安全管理软件

安企神局域网监控软件&#xff0c;员工电脑终端的安全管理软件 安企神局域网监控软件下载使用 公司老板其实最怕的就是公司机密遭到泄露&#xff0c;而一般泄露的方法都是通过一些通讯软件而泄露出去的&#xff0c;如微信、qq等等&#xff0c;所以很多老板都想知道有什么软件…

idea 配置checkstyle全过程

checkstyle是提高代码质量,检查代码规范的很好用的一款工具&#xff0c;本文简单介绍一下集成的步骤&#xff0c;并提供一份完整的checkstyle的代码规范格式文件&#xff0c;以及常见的格式问题的解决方法。 一&#xff0c;安装 打开idea的文件选项&#xff0c;选择设置&…

Intel oneAPI笔记(1)--oneAPI简介、SYCL编程简介

oneAPI简介 Intel oneAPI是Intel提供的统一编程模型和软件开发框架。 它旨在简化可充分利用英特尔各种硬件架构&#xff08;包括 CPU、GPU 和 FPGA&#xff09;的应用程序的开发 oneAPI一个重要的特性是开放性&#xff0c;支持多种类型的架构和不同的硬件供应商&#xff0c;是…

记录一次时序数据库的实战测试

0x1.前言 本文章仅用于信息安全防御技术分享&#xff0c;因用于其他用途而产生不良后果&#xff0c;作者不承担任何法律责任&#xff0c;请严格遵循中华人民共和国相关法律法规&#xff0c;禁止做一切违法犯罪行为。文中涉及漏洞均以提交至教育漏洞平台。 0x2.背景 在某次Edus…

【Redis】Redis常用命令-getsetkeysexistsexpirettltype

文章目录 读取文档注意事项set命令get命令全局/通用命令KEYSEXISTSDELEXPIRETTLTYPE 读取文档注意事项 官方文档链接&#xff1a;https://redis.io/ 注意&#xff1a;redis的命令不区分大小写 在redis文档给出的语法格式说明&#xff1a; []&#xff1a;相当于一个独立的单元&a…

golang 发起 http 请求,获取访问域名的 ip 地址(net, httptrace)

前言 今天碰到了个需求&#xff0c;我要知道程序对外访问的 http 请求域名的 ip 地址。 直接查看 golang 的 net/http 包&#xff0c;发现 Response 中并没有我想要的 ip 信息。 考虑到在 OSI 七层模型中&#xff0c;ip 是网络层协议&#xff0c;而 http 是应用层协议。去翻…

计算机视觉的监督学习与无监督学习

什么是监督学习&#xff1f; 监督学习是一种机器学习算法&#xff0c;它从一组已标记的 合成数据生成器中生成的训练数据中学习。这意味着数据科学家已经用正确的标签&#xff08;例如&#xff0c;“猫”或“狗”&#xff09;标记了训练集中的每个数据点&#xff0c;以便算法可…

设计模式总结

1.将软件与设计模式比拟为城市与建筑模式&#xff0c;那么在面向对象的解决方案里&#xff0c;我们将对象和接口看成墙壁和门窗&#xff0c;模式的核心在于提供了相关问题的解决方案。 在软件设计中可能会遇到很多类似的问题&#xff0c;在每次遇到类似问题时我们不必全都新想…

MYSQL 多表联查详解

目录 一、一个案例引发的多表连接 二、笛卡尔积的错误和与正确的多表查询 2.1、笛卡尔积错误展示 2.2、笛卡尔积解决方法 2.3、练习 三、多表查询分类 3.1、等值连接 vs 非等值连接 3.2、自连接 vs 非自连接 3.3、内连接 vs 外连接 内连接&#xff08;inner join&…