linux 线程的调度策略

2023-05-16

目录

一、调度策略

1.实时线程

2.非实时线程

3.抢占式调度策略

运行特点:

4.轮询式调度策略

运行特点:

二、设置线程的调度策略步骤

1.定义线程句柄

2.定义线程属性结构体

3.初始化属性结构体

4.设置线程是否继承父线程调度策略

5.设置线程的调度策略属性

6.设置优先级

7.创建线程

三、示例代码



 

一、调度策略

共有三种调度策略,可分为实时线程调度策略和非实时线程调度策略

包括 SCHED_OTHER(正常、非实时)、SCHED_RR(实时、轮 转法)和SCHED_FIFO(实时、先入先出)三种,缺省为  SCHED_OTHER,后两种调度策略仅对超级用户有效

1.实时线程

单位时间相应能力强,里面拥有1-99个静态优先级,数字越大,优先级越高

需要有管理员权限才能启动实时线程

特点:

1.实时线程分99个静态优先级,数字越大,优先级越高

2.高优先级的实时线程会完全抢占低优先级实时线程的资源(指令运行资源)

3.在实时线程当中支持抢占调度策略轮询调度策略

4.拥有抢占所有实时线程运行资源的能力

5.必须拥有超级用户权限才能够运行

2.非实时线程

单位时间中,并没有过分的去在乎响应能力的一个线程,里面只有一个静态优先级0,也就是在非实时线程中,它是没有静态优先级的概念的,他的所有的执行过程都是由系统自动分配的

特点:

1.非实时线程只有一个静态优先级,所以同时非实时线程的任务无法抢占他人的资源

2.在非实时线程当中只支持其他调度策略(自动适配的,系统分配的调度策略)

3.支持动态优先级系统自适应,从-20到19的动态优先级(nice值)

3.抢占式调度策略

运行特点:

同一静态优先级的情况下,抢占调度策略的线程一旦运行到便会一直抢占CPU资源,而其他同一优先级的只能一直等到这个抢占式调度策略的线程退出才能被运行到(非实时线程会有一小部分资源分配到

4.轮询式调度策略

运行特点:

同一静态优先级的情况下,大家一起合理瓜分时间片,不会一直抢占CPU资源(非实时线程会有一小部分资源分配到)

二、设置线程的调度策略步骤

1.定义线程句柄

pthread_t thread

2.定义线程属性结构体

pthread_attr_t attr

3.初始化属性结构体

pthread_attr_init(&attr);

4.设置线程是否继承父线程调度策略

只有不继承父线程的调度策略才可以设置线程的调度策略

pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);

PTHREAD_EXPLICIT_SCHED:不继承

PTHREAD_INHERIT_SCHED:继承父进程的调度策略

5.设置线程的调度策略属性

函数原型:

int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);

参数:attr:线程属性结构体地址     policy:调度策略

返回值:成功的情况下,返回0,失败返回非0值,errno不会被设置

例:

pthread_attr_setschedpolicy(&attr,SCHED_FIFO);//抢占式调度策略

6.设置优先级

当调度策略为实时(即 SCHED_RR或SCHED_FIFO)时才有效

在运行时通过 pthread_setschedparam()函数来改变,缺省为0。

pthread_attr_setschedparam  函数功能:设置静态优先级

参数:

attr:线程属性结构体地址

param:优先级结构体,里面只有元素sched_priority

返回值:成功的情况下,返回值为0,失败返回非0值,errno不会被设置

例:

struct sched_param param;

param.sched_priority=1;

pthread_attr_setschedparam(&attr,&param);

7.创建线程

rc = pthread_create( &thread,&attr,thread_one,(void *)"1");

三、示例代码

#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sched.h>

void *thread_one(void * arg)
{
    int i,j;
    while (1)
    {fprintf(stderr,"%c",*(char *)arg);
    for (i = 0; i < 100000; i++)
        for(j = 0;j < 1000; j++);
    }
    
}

int main(int arg,char ** argv)
{
    int res,rc1,rc2,rc3;
    pthread_t thread1,thread2,thread3;
    long t=100;
    long result2;
    pthread_attr_t attr1,attr2,attr3;//未初始化,attr里面的值为空
    struct sched_param param1,param2;
    pthread_attr_init(&attr1);//初始化,attr的值为默认值
    pthread_attr_init(&attr2);
    pthread_attr_setinheritsched(&attr1,PTHREAD_EXPLICIT_SCHED);//不继承,只有不继承父线程的调度策略才可以设置线程的调度策略
    pthread_attr_setinheritsched(&attr2,PTHREAD_EXPLICIT_SCHED);
    pthread_attr_setschedpolicy(&attr1,SCHED_FIFO);//抢占式调度策略
    pthread_attr_setschedpolicy(&attr2,SCHED_FIFO);//抢占式调度策略
    param1.sched_priority=1;
    param2.sched_priority=1;
    pthread_attr_setschedparam(&attr1,&param1);
    pthread_attr_setschedparam(&attr2,&param2);
    //pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//设置线程分离态,pthread_join()失效
    rc1 = pthread_create( &thread1,&attr1,thread_one,(void *)"1");
    rc2 = pthread_create( &thread2,&attr2,thread_one,(void *)"2");
    rc3 = pthread_create( &thread3,NULL,thread_one,(void *)"3");
    pthread_attr_destroy(&attr1);//删除属性
    pthread_attr_destroy(&attr2);
    pthread_join(thread1,NULL);
    pthread_join(thread2,NULL);
    pthread_join(thread3,NULL);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 线程的调度策略 的相关文章

随机推荐

  • IE浏览器设置兼容性

    在访问一些老旧的网站时 xff0c 会出现图像等画面显示不全或不显示的现象 xff0c 可尝试设置一下浏览器的兼容性视图 打开IE浏览器 xff0c 点击 设置 钮 选择兼容性视图设置 2 在添加网站窗口 xff0c 填入对应网站网址 xf
  • windows10 更改系统默认程序

    更改系统默认打开程序 点击wind10系统左下角windows图标 2 点击 设置 3 在设置界面选择 应用 4 在侧边栏选择 默认应用 5 在默认应用中可修改系统应用的默认打开软件
  • 打印机维护

    打印机使用过程中大致会有两种问题 一 硬件问题 xff1a 等耗材更换 xff1a 墨水 xff0c 碳粉 xff0c 硒鼓 xff0c 墨盒 1 喷墨打印机 xff1a 主要就是字车 搓纸组件和横向移动就是x轴 xff1b 2 针式打印机
  • I2C总线和触摸屏驱动移植实战-linux驱动开发第9部分-朱有鹏-专题视频课程

    I2C总线和触摸屏驱动移植实战 linux驱动开发第9部分 9306人已学习 课程介绍 本课程是linux驱动开发的第9个课程 xff0c 主要内容是linux的I2C子系统以及电容触摸屏驱动的移植 学习本课程的核心点在于I2C子系统 xf
  • 【C语言和C++】实现线程池

    目录 一 线程池总体结构 二 线程数组 三 添加任务队列 四 管理者线程 五 销毁 六 其他子函数 七 测试代码 附录 xff08 C和C 43 43 代码 xff09 最后有全部代码 xff0c 急需可以跳过 线程池是一种概念 xff0c
  • 【C语言】算法学习·哈希算法全解

    目录 C中的哈希 它能做什么 xff1f 快吗 xff1f 是图书馆吗 xff1f C C 43 43 和平台 BSD 许可 下载 uthash 获得帮助 贡献 包括的额外内容 历史 可以直接从此处开始阅读 哈希结构 钥匙 哈希句柄 关于记
  • 小知识·PD充电协议

    目录 PD充电器硬件结构 pd充电协议是什么 pd协议快充什么意思 PD快充协议优势 USB PD快速充电通信原理 PD充电器硬件结构 典型的手机充电器的硬件结构 xff08 以基于Dialog方案的高通QC2 0快充协议为例 xff09
  • 小知识·typec耳机原理

    目录 数字耳机和模拟耳机 手机中模拟和数字耳机的差异 typec耳机介绍 数字耳机和模拟耳机 模拟耳机即我们的常见的3 5mm接口的耳机 xff0c 包括左右声道 xff0c 地或者mic xff0c 如左图 数字耳机 右图 包含一个usb
  • 小知识·adb安装和使用方法

    目录 一 adb是什么 xff1f 二 adb有什么作用 三 如何启用adb调试 四 如何判断设备连接正常 五 如何下载安装adb 1 adb下载地址 xff1a 2 按装步骤 六 adb命令大全 1 查看设备 2 Adb应用管理 3 安装
  • 【C++】搭建HTTP服务器

    目录 项目介绍 网络协议栈介绍 协议分层 数据的封装与分用 HTTP相关知识介绍 HTTP的特点 URL格式 URI URL URN HTTP的协议格式 HTTP的请求方法 HTTP的状态码 HTTP常见的Header CGI机制介绍 CG
  • Linux命令·netstat

    netstat命令用于显示与IP TCP UDP和ICMP协议相关的统计数据 xff0c 一般用于检验本机各端口的网络连接情况 netstat是在内核中访问网络及相关信息的程序 xff0c 它能提供TCP连接 xff0c TCP和UDP监听
  • Linux命令·ss

    ss是Socket Statistics的缩写 顾名思义 xff0c ss命令可以用来获取socket统计信息 xff0c 它可以显示和netstat类似的内容 但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息 xff0c
  • LeetCode·每日一题·2437. 有效时间的数目·模拟

    作者 xff1a 小迅 链接 xff1a https leetcode cn problems number of valid clock times solutions 2262448 mo ni zhu shi chao ji xian
  • john破解用户密码和防破解

    目录 一 系统弱口令检测 二 防止暴力破解 一 系统弱口令检测 Joth the Ripper xff0c 简称JR 一款开源的密码分析工具 xff0c 支持字典式的暴力破解 通过对shadow文件的口令分析 xff0c 可以检测密码强度
  • 块设备驱动介绍-linux驱动开发第10部分-朱有鹏-专题视频课程

    块设备驱动介绍 linux驱动开发第10部分 3265人已学习 课程介绍 本课程是linux驱动开发的第10个课程 xff0c 主要内容是linux的块设备驱动的介绍 xff0c 首先详细讲了块设备驱动和字符设备驱动的核心差异 xff0c
  • Linux各个系统版本及区别(Ubuntu,CentOS..)

    一 概览 Linux的版本号分为两部分 xff1a 内核版本和发行版本 内核版本 xff1a 不包含外围程序GNU程序库和工具 xff0c 命令行shell xff0c 图形界面的X Window系统和相应的桌面环境等 发行版本 xff1a
  • keil5编译报错问题

    keil5一开始编译文件总是报错 error 3092 anonymous unions are only supported in gnu mode or when enabled with pragma anon unions 错误 x
  • MySQL中的函数

    1 单行函数和多行函数 xff08 聚合函数 分组函数 xff09 xff1a 只对一行进行变换 每行返回一个结果 xff1b 1 单行函数 xff1a a 数值函数 xff1a 基本函数 xff1a ABS x 绝对值 SIGN x 0
  • Centos防火墙配置

    一 防火墙的概念 防火墙技术是用于安全管理的软件和硬件设备 xff0c 在计算机内 外网之间构建一道相对隔绝的保护屏障 xff0c 以保护数据和信息安全性的一种技术 防火墙分为网络防火墙和主机防火墙 网络防火墙由软件和硬件组成 xff0c
  • linux 线程的调度策略

    目录 一 调度策略 1 实时线程 2 非实时线程 3 抢占式调度策略 运行特点 xff1a 4 轮询式调度策略 运行特点 xff1a 二 设置线程的调度策略步骤 1 定义线程句柄 2 定义线程属性结构体 3 初始化属性结构体 4 设置线程是