linux线程阻塞中CPU的占用率

news2024/11/15 11:21:24

linux线程阻塞中CPU的占用率

一、简介

总所周知Linux系统下,我们编写的程序进入阻塞后,系统把任务挂起,交给内核进行处理,此时我们的进程CPU占用率不高,可以说是占用率0.0%,让CPU资源交给其他进程处理,这样系统执行效率就很高,系统也很安全。
在这里插入图片描述
使用top命令产看到列表中,CPU占用率较高的也就是0.7%。

二、线程阻塞sleep

实现秒延时的函数

unsigned int sleep(unsigned int seconds);

现在做一个测试,在mian()加入一个延时sleep()函数,同时创建一个线程也在里面键入延时函数sleep(),测试代码如下。

#include <stdio.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <pthread.h>

unsigned char I_ucRunning = 0;

static void *Timer_routine(void *arg){
	//死循环执行
    while (I_ucRunning != 0) {
        printf("I'm pthread,is running\n");
        sleep(1);
        /* code */
    }
}


int main(void)
{
    int k = 0;
	//设定线程执行死循环
    I_ucRunning = 1;
    pthread_t t;
	//开启线程
    int ret= pthread_create(&t, NULL, Timer_routine, NULL);
    if(ret){
        exit(ret);
    }
    //循环处理
    for(k = 0;k < 10;k++)
    {
      sleep(1);
      printf("I'm main process.\n");
    }
    //退出线程中的死循环
    I_ucRunning = 0;
    //等待退出线程
    pthread_join(t, NULL);
    //销毁进程
    exit(0);
}

先来看看执行效果!!
在这里插入图片描述

看看CPU的占用率!!
在这里插入图片描述
在运行同时刷新了连续几十次,找不到这个进程,原因是CPU占用率太低,都排不上这个列表…
好!非常好!CPU占用率低!
但是这个函数似乎有点延时太长了

三、加重CPU负担

于是我把线程里面的sleep()给去掉后,重新编译运行,代码如下。

#include <stdio.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>

unsigned char I_ucRunning = 0;

static void *Timer_routine(void *arg)
{
    while (I_ucRunning != 0)
    {
        printf("I'm pthread,is running\n");
        //sleep(1);
        /* code */
    }
}


int main(void)
{
    int k = 0;

    I_ucRunning = 1;
    
    pthread_t t;

    int ret= pthread_create(&t, NULL, Timer_routine, NULL);
    if(ret){
        exit(ret);
    }

    //
    for(k = 0;k < 30;k++)
    {
      sleep(1);
      printf("I'm main process.\n");
    }
    
    //
    I_ucRunning = 0;

    //
    pthread_join(t, NULL);

    //
    exit(0);
}

运行效果是CPU的占用率达到32.7%,非常不好!!
由于我使用虚拟机运行,这种程序对我的电脑是九牛一毛,如果是放到嵌入式系统中,CPU占用率可能到达99.99%,后果是系统很卡,导致其他线程无法合理运行使得。
在这里插入图片描述

四、总结

合理运用阻塞函数sleep()使得线程阻塞,让出CPU资源给其他进程使用,才是高效运行系统做法,提高了系统安全性和实时性。

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

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

相关文章

【算法】三道算法题目单词拆分,填充每个节点的下一个右侧节点指针以及组合总和

算法第一道算法题&#xff1a;单词拆分java解答参考第二道算法题&#xff1a;填充每个节点的下一个右侧节点指针java 解答参考第三道算法题&#xff1a;组合总和java解答参考大家好&#xff0c;我是小冷。 今天还是继续学习算法技术知识吧 第一道算法题&#xff1a;单词拆分 …

Docker - 镜像操作命令

镜像名称一般分为两部分组成:[repository]:[tag]在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像1.下载docker镜像 docker pull repository:tag2.查看本地所有镜像 docker images3.创建镜像别名 docker tag repository:tag repository111:tag4.查看镜像…

java面试题-集合篇

Collection1.Collection有哪些类&#xff1f;Java集合框架中的Collection接口是所有集合类的基础接口&#xff0c;定义了一些基本的集合操作&#xff0c;如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。ListList接口定义了按照索引访问和操…

Module理解及使用

ES6的模块化设计思想是静态化&#xff0c;也就是说&#xff0c;在编译的时候确定模块的依赖关系&#xff0c;以及输出输出入的变量。而CommonJS和AMD模块都是在运行时确定的。ES6的模块不是对象&#xff0c;而是通过export显示指定输出的代码&#xff0c;再通过import命令输入。…

ES6新特性详解

文章目录1. let和const1.1 let声明变量1.2 const声明常量2. 模板字符串3. 解构赋值3.1 数组的解构赋值3.2 对象的解构赋值4. 函数扩展4.1 参数默认值4.2 剩余参数4.3 箭头函数5. 对象扩展5.1 对象简写5.2 属性名表达式5.3 扩展运算符6. Symbol7. Iterator和Generator7.1 Iterat…

k8s自动化安装脚本(kubeadm-1.23.7)

文章目录介绍软件架构版本介绍更新内容2023-02-192023-02-152023-02-142023-02-102022-10-202022-08-06准备部署包操作步骤环境准备结构备注解压部署包修改host文件脚本使用方式初始化环境验证ansible配置安装k8s集群登录master的节点添加node节点master节点状态检查组件安装安…

高精度算法一

目录 1. 基础知识 2. 大整数 大整数 3. 大整数 - 大整数 1. 基础知识 利用计算机进行数值计算&#xff0c;有时会遇到这样的问题&#xff1a;有些计算要求精度高&#xff0c;希望计算的数的位数可达几十位甚至几百位&#xff0c;虽然计算机的计算精度也算较高了&#xff0c…

大数据之---Nifi-处理器类别_详细了解各种处理器的含义用途---大数据之Nifi工作笔记0007

处理器有很多类这里主要分了,数据转换的可以看到上面的这些是数据转换常用的 然后: 这里这个controlrate,用来控制流的速率,来保护作用,防止崩掉 distributeLoad用来负载均衡,减轻压力 这里的路由是,根据是否满足对应的条件,来执行是否把数据路由到某个地方. 然后来看数据库…

数据库技术-函数依赖、键与约束、范式

一、函数依赖 给定一个x&#xff0c;能唯一确定一个Y&#xff0c;就称x确定Y&#xff0c;或者说Y依赖于x&#xff0c;例如YX*X函数。 函数依赖又可扩展以下两种规则: 部分函数依赖:A可确定C&#xff0c;(A,B)也可确定C,(A,B)中的一部分&#xff08;即A&#xff09;可以确定C&a…

Spring Cloud Nacos实战(一)- 下载和安装

Spring Cloud Alibaba Nacos下载和安装 Nacos介绍 ​ Nacos&#xff08;Naming Configuration Service&#xff09; 是一个易于使用的动态服务发现、配置和服务管理平台&#xff0c;用于构建云原生应用程序 ​ 服务发现是微服务架构中的关键组件之一。Nacos 致力于帮助您发现…

使用nginx单独部署Vben应用

前言 本文主要介绍Vben使用nginx单独部署的方式&#xff0c;其实前端发展到现在已经不是当年的jsp&#xff0c;asp必须要和后端一起部署了。单独部署调试的工具也很多&#xff0c;比如vue-cli-service 和 Vben中用到的vite &#xff0c;当然这些我们一般用在开发的工程中。正式…

SpringCloud(三)Hystrix断路器服务降级、服务熔断、服务监控案例详解

七、Hystrix断路器 7.1 简介 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免地失败。 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其它的微…

C# chart绘图 鼠标响应

1、图形自动滚动设置 chart1.ChartAreas[0].AxisX.Maximum 横坐标显示区域最大值 chart1.ChartAreas[0].AxisX.Minimum 横坐标显示区域最小值 显示宽度 chart1.ChartAreas[0].AxisX.Maximum - chart1.ChartAreas[0].AxisX.Minimum chart1.ChartAreas[0].AxisX.Maximum x_d…

ChatGPT从业影响之个人浅见

文章目录前言ChatGPT简介AI简介ChatGPT对从业者的影响参考资料前言 ChatGRT最近很火&#xff0c;网上有一些观点&#xff0c;他会取代很多职业&#xff0c;让产业产生颠覆性的变化。今天聊聊自己的想法&#xff0c;他的出现&#xff0c;是否会让我&#xff08;程序员&#xff…

qmt api 接口文档

http://qmt.ptradeapi.com 用户自行安装 Python 三方库 对于有经验的 Python 开发者来说&#xff0c;平台提供了自行安装第三方库的方式。为了引入额外的第三方库&#xff0c;用户需要做如下一些操作&#xff1a; 安装前注意事项&#xff1a; 三方库的安装有可能会引起系统错误…

JVM学习篇对象创建与内存分配机制深度剖析

1. 对象的创建 对象创建的主要流程: 1.1 类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相…

【Java 面试合集】内存中为什么要区分栈和堆

内存中为什么要区分栈和堆 1. 概述 嗨&#xff0c;大家好Java 面试合集又来了&#xff0c;今天我们分享的主题很大众化以及普通。无论是Java 语言本身还是别的语言都会有所涉及&#xff0c;但是今天我们从Java角度来讲下 2. 分析 今天我们会从多个方向来分享这个话题 2.1 栈是…

ETCD本地多成员集群部署

目录安装部署etcdctl 操作etcd使用http请求操作etcd本地多成员集群搭建python获取成员信息参考安装部署 按照官网文档&#xff0c;安装release版本 https://etcd.io/docs/v3.4/install/ [rootVM-33-162-centos /usr/local/bin]# etcd --version etcd Version: 3.4.16 Git SH…

点云配准方法原理(NDT、ICP)

配准是点云处理中的一个基础问题&#xff0c;众多学者此问题进行了广泛而深入的研究&#xff0c;也出现了一系列优秀成熟的算法&#xff0c;在三维建模、自动驾驶等领域发挥着重要的作用。 本文主要介绍粗配准NDT (Normal Distribution Transform) 与 精配准ICP (Iterative Cl…

最新最全中小微企业研究数据:海量创业公司信息与获取投资信息(1985-2021年)

一、企业获取投资名单&资方信息 数据来源&#xff1a;搜企网、企查查、天眼查 时间跨度&#xff1a;1985年8月-2021年9月 区域范围&#xff1a;全国范围 数据字段&#xff1a;企业名称、时间、获得投资金额以及投资方信息 部分数据&#xff1a; DateCompany_nameUnit…