Linux实时调度策略(SCHED_RR)和CFS(SCHED_OTHER)之间的区别

2024-04-26 03:48

本文主要是介绍Linux实时调度策略(SCHED_RR)和CFS(SCHED_OTHER)之间的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文试图从直观角度,说明SCHED_RR调度策略和SCHED_OTHER调度策略之间的区别。

在Linux上,SCHED_OTHER和SCHED_NORMAL的意思相同,它们都是指的CFS调度策略,只不过,在内核中,CFS定义为SCHED_NORMAL,在用户态,CFS定义为SCHED_OTHER.

可参照内核头文件和musl libc头文件:

测试代码如下:

#include <string.h>
#include <pthread.h>
#include <sched.h>
#include <stdio.h>void *child_thread(void *arg)
{int policy = 0;int max_priority = 0,min_priority = 0;struct sched_param param;pthread_attr_t attr;struct sched_param sp;bzero((void*)&sp, sizeof(sp));pthread_attr_init(&attr);pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);pthread_attr_getinheritsched(&attr,&policy);if(policy == PTHREAD_EXPLICIT_SCHED){printf("Inheritsched:PTHREAD_EXPLICIT_SCHED\n");}if(policy == PTHREAD_INHERIT_SCHED){printf("Inheritsched:PTHREAD_INHERIT_SCHED\n");}//pthread_attr_setschedpolicy(&attr,SCHED_RR);pthread_attr_setschedpolicy(&attr,SCHED_OTHER);pthread_attr_getschedpolicy(&attr,&policy);if(policy == SCHED_FIFO){printf("Schedpolicy:SCHED_FIFO\n");}if(policy == SCHED_RR){printf("Schedpolicy:SCHED_RR\n");}if(policy == SCHED_OTHER){printf("Schedpolicy:SCHED_OTHER\n");}max_priority = sched_get_priority_max(policy);min_priority = sched_get_priority_min(policy);printf("Maxpriority:%u\n",max_priority);printf("Minpriority:%u\n",min_priority);param.sched_priority = max_priority;pthread_attr_setschedparam(&attr,&param);sp.sched_priority = 1;// Actually set the sched params for the current thread.if (0 == pthread_setschedparam(pthread_self(), policy, &sp)) {printf("IO Thread #%ld using high-priority scheduler!", pthread_self());}printf("sche

这篇关于Linux实时调度策略(SCHED_RR)和CFS(SCHED_OTHER)之间的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936636

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet