本篇文章给大家谈谈linux线程延时多久,以及linux进程运行时间对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、linux 多线程cpu运行时间
- 2、linux下main()中新建一个线程,延时问题?
- 3、linux内核进行线程切换需要多少时间
- 4、在linux下,想用sleep函数实现延时五秒,应该怎么设参数?
- 5、linux内核进行线程切换需要多少时间?
1、linux 多线程cpu运行时间
1、程序(linux环境下)运行自己写的线程之后,程序卡顿
2、查看程序(linux环境下)运行资源消耗 top命令,CPU占用率达到了98%
问题分析
1、反复查看线程中程序执行步骤,并没有高耗CPU的操作
2、查看程序优化的百度经验,优化一些算法,但也不能CPU占用率达到98%
3、最后多次查看线程概念、原理得出结论:
线程就是一个死循环,线程要有跳出语句,要预留出其他程序的运行的时间片
解决:
while(1)中加入sleep(),防止一直占用CPU
---恢复内容结束---
2、linux下main()中新建一个线程,延时问题?
你对sleep可能有些误解,sleep本身就是使进程睡眠,睡眠的线程不会去占用CPU的。对于一个正在运行的线程来说,他最主要占用的资源就是CPU运行时间和内存。既然SLEEP使其放弃对CPU的进程权限(意思是这段时间内,他不会到CPU执行,如果想了解原因和具体实现可以参考linux内核代码对sleep的实现),那你不想让他占用资源意思就是说:不想让它占内存喽??
从定义角度来说,线程不拥有内存资源(从内核中可以查到fork和vfork创建的都是线程,他们都不会新分配内存空间,而是和父进程共享内存空间),所以说你已经没有什么可以释放了。如果还不明白,可以发信息给我。
或许你更希望做的是,压根就不启动这个线程,而是一个小时后启动。因为你没有办法然main主线程1小时后启动这个线程,因为你把握不好时间,那我可以建议你考虑下linux守护线程cron,这个可以达到你1小时后启动的目的。
3、linux内核进行线程切换需要多少时间
linux下线程分为用户级线程和内核级线程,在内核来看,线程和进程是一样的,本质上没有区别
内核提供的是创建进程的接口do_fork()。内核提供了两个系统调用clone()和fork(),最终都用不同的参数调用do_fork()核内API。当然,要想实现线程,没有核心对多进程(其实是轻量级进程)共享数据段的支持是不行的,因此,do_fork()提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、 CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLONE_PID(共享进程ID,仅对核内进程,即0号进程有效)。当使用fork系统调用时,内核调用do_fork()不使用任何共享属性,进程拥有独立的运行环境,而使用 pthread_create()来创建线程时,则最终设置了所有这些属性来调用__clone(),而这些参数又全部传给核内的do_fork(),从而创建的“进程”拥有共享的运行环境,只有栈是独立的,由__clone()传入。
具体可以参考深入理解Linux内核第三版,讲的非常详细
4、在linux下,想用sleep函数实现延时五秒,应该怎么设参数?
使用权限 : 所有使用者
使用方式 : sleep [--help] [--version] number[smhd]
说明 : sleep 可以用来将目前动作延迟一段时间
参数说明 :
--help : 显示辅助讯息
--version : 显示版本编号
number : 时间长度,后面可接 s、m、h 或 d
其中 s 为秒,m 为 分钟,h 为小时,d 为日数
例子 :
显示目前时间后延迟 1 分钟,之后再次显示时间 :
date;sleep 1m;date
这个命令更多应用于shell脚本编程里和程序里
如下面的一段程序:
应用程序:
复制代码
代码如下:
#include syswait.h
usleep(n) //n微秒
Sleep(n)//n毫秒
sleep(n)//n秒
驱动程序:
#include linux/delay.h
mdelay(n) //milliseconds 其实现
#ifdef notdef
#define mdelay(n) (\
{unsigned long msec=(n); while (msec--) udelay(1000);})
#else
#define mdelay(n) (\
(__builtin_constant_p(n) (n)=MAX_UDELAY_MS) ? udelay((n)*1000) : \
({unsigned long msec=(n); while (msec--) udelay(1000);}))
#endif
调用asm/delay.h的udelay,udelay应该是纳秒级的延时
Dos:
sleep(1); //停留1秒
delay(100); //停留100毫秒
Windows:
Sleep(100); //停留100毫秒
Linux:
sleep(1); //停留1秒
usleep(1000); //停留1毫秒
每一个平台不太一样,最好自己定义一套跨平台的宏进行控制
秒还是微秒?关于延时函数sleep()
因为要写一段代码,需要用到sleep()函数,在我印象中,sleep(10)好像是休眠10微秒,结果却是休眠了10秒(在Linux下)。觉得很奇怪,因为头儿也记得好像是微秒为单位的。所以就查了一下。
原来linux下的sleep函数原型为:
unsigned int sleep(unsigned int seconds);
而MFC中的Sleep函数原型为:
void Sleep(DWORD dwMilliseconds);
也就是说,Linux下(使用的gcc的库),sleep()函数是以秒为单位的,sleep(1);就是休眠1秒。而MFC下的sleep()函数是以微秒为单位的,sleep(1000);才是休眠1秒。原来如此啊。而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:void usleep(unsigned long usec);当然,使用的时候别忘记#include system.h哦。
另外值得一提的是,linux下还有个delay()函数,原型为extern void delay(unsigned int msec);它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用 delay(250);
5、linux内核进行线程切换需要多少时间?
Linux内核切换线程时间在微秒级别,几十微秒。
1. 查看需要更新的内核命令:
apt-cache search linux
#该命令将会显示所有可以获取的内核
2. 安装内核,假设要安装的内核为2.6.39-0,则使用下面的命令
sudo apt-get install linux-headers-2.6.39-0-generic linux-image-2.6.39-0-generic
#安装后,reboot即可,重启后,既是以新内核启动。
linux线程延时多久的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux进程运行时间、linux线程延时多久的信息别忘了在本站进行查找喔。