用户程序中的睡眠:

sleep()
    usleep()
    nanosleep()

sleep()和nanosleep()都是使进程睡眠一段时间后被唤醒,但是二者的实现完全不同。
Linux中并没有提供系统调用sleep(),sleep()是在库函数中实现的,它是通过调用alarm()来设定报警时间,调用sigsuspend()将进程挂起在信号SIGALARM上,sleep()只能精确到秒级上。

nanosleep()则是Linux中的系统调用,它是使用定时器来实现的,该调用使调用进程睡眠,并往定时器队列上加入一个timer_list型定时器,time_list结构里包括唤醒时间以及唤醒后执行的函数,通过nanosleep()加入的定时器的执行函数仅仅完成唤醒当前进程的功能。系统通过一定的机制定时检查这些队列(比如通过系统调用陷入核心后,从核心返回用户态前,要检查当前进程的时间片是否已经耗尽,如果是则调用schedule()函数重新调度,该函数中就会检查定时器队列,另外慢中断返回前也会做此检查),如果定时时间已超过,则执行定时器指定的函数唤醒调用进程。当然,由于系统时间片可能丢失,所以nanosleep()精度也不是很高。

alarm()也是通过定时器实现的,但是其精度只精确到秒级,另外,它设置的定时器执行函数是在指定时间向当前进程发送SIGALRM信号。

sleep被打断的例子应该是,SIGALARM,因为本身sleep就是用SIGALARM实现的。

最新文章

  1. JavaWeb配置外部应用的两种方式
  2. Datasnap Image
  3. Linux 网络编程(多路复用)
  4. Jquery-pagination.js分页处理
  5. 你可能不再需要Underscore
  6. MyEclipse使用总结——MyEclipse去除网上复制下来的来代码带有的行号
  7. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem G: Check The Check(模拟国际象棋)
  8. svn 批量更新 bat脚本
  9. 天坑 之 java web servlet+jsp项目 配置后 404 (MyEclipse转eclipse)
  10. 【Unity3D自学记录】Unity3D网络之Socket聊天室初探
  11. 洛谷 P1027 【Car的旅行路线】
  12. php+redis实现消息队列
  13. Devexpress VCL Build v2015 vol 15.1.2发布
  14. springboot No Java compiler available for configuration options compilerClassName: [null] and compil
  15. BZOJ2728 HNOI2012与非(并查集+数位dp)
  16. MySQL问题解决:-bash:mysql:command not found
  17. MAC清理DS_Store和._文件
  18. Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode
  19. Kafka 单节点多Kafka Broker集群
  20. 配置git服务

热门文章

  1. 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)
  2. [javase学习笔记]-8.8 构造代码块
  3. WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
  4. POJ 3279 枚举?
  5. 【DNN 系列】 添加模块后不显示
  6. windows下MySQL5.6以上版本,如何通过修改配置文件来修改数据库的最大连接数啊?
  7. Css border样式
  8. Linux 常用命令:系统状态篇
  9. C++输入流
  10. leetcode第一刷_Text Justification