当前位置: 技术问答>linux和unix
sleep() 函数的原理是什么
来源: 互联网 发布时间:2016-12-07
本文导语: clock_t start=clock(); sleep(5); clock_t end=clock(); float time=(float)(end-start)/CLOCKS_PER_SEC; printf("Sleep clock:%fn",time); 结果是:0.000000 sleep与时钟有什么关系呢,其原理是什么。 | sleep把进程的运...
clock_t start=clock();
sleep(5);
clock_t end=clock();
float time=(float)(end-start)/CLOCKS_PER_SEC;
printf("Sleep clock:%fn",time);
结果是:0.000000
sleep与时钟有什么关系呢,其原理是什么。
|
sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片。同时根据该进程的睡眠时间,将进程挂入相应的定时器队列中。
同时内核维持一个定时器队列,每一次时钟中断处理,都把当前到期的队列中的进程唤醒,加入到可运行进程队列中。 同时对所有挂入定时器队列中的进程时间值减1,
同时内核维持一个定时器队列,每一次时钟中断处理,都把当前到期的队列中的进程唤醒,加入到可运行进程队列中。 同时对所有挂入定时器队列中的进程时间值减1,
|
clock 返回的是CPU的使用时间吧
在sleep 过程中,没有使用cpu时间,所以end=start
在sleep 过程中,没有使用cpu时间,所以end=start
|
sleep的原理是這樣的,首先獲取當前系統滴答數A,然後再加上需要sleep的時長結合CPU時鐘頻率計算得到的滴答數B。再來一個while循環,循環體中不停獲取當前滴答數,大於(A+B)時跳出循環,函數返回。