linux线程阻塞中CPU的占用率

news/2024/10/18 1:28:58/

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.ppmy.cn/news/733571.html

相关文章

j4125锁频,ESXI无睿频原因及解决方法(修改BIOS设置)

声明&#xff1a;本教程仅供学习参考&#xff0c;因对BIOS的操作带来的风险自行承担 我的设备是畅网J4125 i226网卡版本&#xff0c;装了ESXI8.0&#xff0c;装好后ESXI只识别基频2.0GHz&#xff0c;四核共7.99GHz&#xff0c;跑满CPU频率能达到8.6GHz&#xff0c;无法达到睿频…

CPU的睿频、超线程、SIMD指令集等特性对密码算法性能的影响

摘要&#xff1a;本文档以XX密码算法为例&#xff0c;研究对CPU的睿频、超线程、SIMD指令集等特性对密码算法性能的影响。初步结结论为&#xff1a;1&#xff09;睿频很重要&#xff0c;默认是开启的&#xff0c;尽量不要关闭&#xff0c;注意全核睿频通常小于最大睿频&#xf…

linux(五)——TX1的cpu/gpu锁频(设置最大频率)

一、背景介绍 主频&#xff1a;CPU自己运算的频率 外频&#xff1a;CPU和外部设备协作的频率 倍频&#xff1a;主频/外频 超频&#xff1a;升高主频&#xff0c;提高运算效率 锁频&#xff1a;一般是为了防止超频&#xff0c;把倍频锁定在特定数字 二、频率的修改 这里以…

MacBook笔记本安装win10后cpu被锁频,无法以满速运行的解决办法

最近把自己的老款08年的MacBook安装了win10&#xff0c;进系统发现本来2.0Ghz的cpu却一直运行在1.5Ghz下&#xff0c;由于MacBook不像普通Windows笔记本可以进BIOS调节参数&#xff0c;只能在安装的系统上想办法&#xff0c;用以下三板斧可以让cpu满速运行 1 在Power Options中…

对Android设备CPU进行锁频

本文对Android设备CPU的状态查看方法和锁频(lock frequency)方法进行详细介绍。这有什么用?作为测试工程师&#xff0c;你值得了解。 CPU频率 首先说下CPU的频率。我们都知道&#xff0c;CPU的工作频率越高&#xff0c;运算就越快&#xff0c;但能耗也更高。然而很多时候&…

笔记本电脑使用电池时CPU锁频0.78GHz

问题 解决方案 下载并打开ThrottleStop&#xff0c;将BD PROCHOT选项的勾去掉&#xff0c;并保存即可。 解决笔记本电脑使用电池时CPU锁频0.79GHz的问题

ThinkpadCPU锁频0.4G问题

1.问题描述 Thinkpad型号&#xff1a;E15 CPU&#xff1a;i5-10210U1.6GHz 系统&#xff1a;Win10家庭版 ThinkpadCPU锁频0.4G&#xff0c;具体是过程是今天我需要去楼下打印东西&#xff0c;要带着笔记本电脑&#xff0c;拔掉电源我就去楼下。 刚开始还是好好的&#xff0c;…

linux下cpu锁定频率以及频率设置

linux下cpu锁定频率以及频率设置 环境如下 ubuntu22.04cpu为5700g 前期准备 使用工具为&#xff1a;cpufrequtils sudo apt-get install cpufrequtils查询cpu相关信息 cpufreq-info# 部分信息如下 analyzing CPU 0:driver: amd-pstateCPUs which run at the same hardware f…