睡眠 (系统调用)

✍ dations ◷ 2025-08-10 16:06:17 #自2019年6月需要计算机科学与技术专家关注的页面,软件,进程,线程,程序设计语言

计算机程序(或进程、任务或线程等)进入不活跃状态并持续一段时间,称为“睡眠”。当引发程序睡眠的代码所设定的内部计时器归零,或是此程序收到唤醒信号或中断时,程序将恢复执行。

睡眠中的程序也有可能不经唤醒而直接被终止。

睡眠指令通常需要输入一个参数,以说明程序睡眠至少多长时间后才恢复执行。这一时间参数的单位通常是秒,有些操作系统可以提供更高精度,例如以毫秒或微秒作为单位。

Windows 操作系统中,Sleep()函数仅有一个参数,即以毫秒计的睡眠时间。Sleep()函数包含于 kernel32.dll 中,但是原生操作系统的批处理文件却并不支持这一指令。安装诸如Windows 2003 Resource Kit等运行环境后,用户便可使用这一指令。

在类Unix操作系统中,sleep()函数使用以秒做单位的无符号整数作为输入参数。如果需要更精确的控制睡眠时间,可以使用 nanosleep()函数。

Windows 操作系统中:

Sleep(2*1000);  // 睡眠2秒

类Unix操作系统中:

sleep(2);       // 睡眠2秒

底层功能

及其他类似的系统指令会被中断信号中断,相应程序也会停止睡眠。而 库函数却不尽相同,在一些老一点的操作系统中,它是通过调用 系统指令实现的,因而必须通过送信号的方式才能运作。

在Windows中,由于除了终止运行信号外没有专门的信号可以用于打断,睡眠函数是不可中断的。不过,Windows提供了 SleepEX 函数来实现通过 APC 调用控制睡眠进程的唤醒。

严格说来,一个线程也可以由于其他线程终止运行或抛出异常被唤醒。

一些系统程序在事件轮询过程中从不被终止,只是在每个周期开始前进入睡眠状态,等待着某些事件的发生唤醒它们。当收到事件之后,它们就被唤醒去处理这些事件,然后进入下一个周期的等待。

还有一些程序周期性的从睡眠中恢复运行并收集事件。当运行恢复,程序拉取事件列表和状态变更情况,然后针对睡眠时发生的事件做相应处理,完成后再次进入睡眠,等待下一个时隙。这类事件被称作心跳事件,或“持久连接”信号,可由上述类型的周期性程序发送。

sleep()函数还在程序执行节奏需要放缓的时候被调用。例如长时间高负荷运行程序时应有包含睡眠函数的代码来减轻硬件过热带来的麻烦,或是解决遗留代码中不为人知的奇妙程序错误。相比于使用仿真器实现的周期平衡的程序,睡眠-运行周期发生的程序的缺点在于如果切换速度不够快,交互式程序就会有明显的延迟,如果太快,唤醒时间就太短以至于无法完成全部工作。

不可中断睡眠指的是在此状态的程序无法对外界信号做出任何立即的响应,只有在为它提供足够的正在等待的资源或是睡眠时间结束它才会开始运行。这类睡眠常见于硬件驱动程序等待磁盘或网络输入输出结束。当进程处于不可中断睡眠状态,睡眠期间的信号会不断堆积到队列里面去。

在类Unix操作系统中,使用指令ps -l可以列出当前终端的全部进程,其中标识进程状态的列使用代码 D 表示不可中断睡眠。这类进程连SIGKILL这样的无条件终止都没办法结束进程,结束他们最简单的方法就是重新启动系统。

相关

  • B35–B49ICD-10 第一章:某些传染病和寄生虫病,主要包括被视为具有可传播性和可传染性的疾病。肠道传染病(A00-A09)结核病(A15-A19)由特定动物传染的细菌性疾病(A20-A28)其他细菌性疾病(A30-A4
  • 国际儿童图书馆国际儿童图书馆(日语:国際子ども図書館,こくさいこどもとしょかん)位于日本东京都台东区上野恩赐公园内,为隶属于国立国会图书馆的分馆。国际儿童图书馆于2000年开馆,该建筑的前身
  • 元基因组学宏基因组学(英语:Metagenomics),又译元基因组学、总体基因体学,是一门直接取得环境中所有遗传物质的研究。研究领域广泛,也可称为环境基因体学、生态基因体学或群落基因体学。在早
  • 霍尔杰弗里·康纳·霍尔(英语:Jeffrey Connor Hall,1945年5月3日-),出生于纽约布鲁克林,美国遗传学家。于1971年获得西雅图华盛顿大学遗传学博士学位,于1974年成为布兰戴斯大学教员。于2
  • 石灰水石灰水(英语:limewater,此处中的“lime”是指石灰而并非青柠;又称:calcium hydroxide)是氢氧化钙的饱和溶液的通俗名称。氢氧化钙,即Ca(OH)2,微溶于水(25°C时溶解度为1.5 g/L。)纯石
  • 凯末尔·奎里达欧鲁凯末尔·奎里达欧鲁(土耳其语:Kemal Kılıçdaroğlu;1948年12月17日-),是一名土耳其政治人物,现任共和人民党领袖,亦是2010年以来土耳其最主要的反对党领袖。他在2002年至2015年期
  • 马塞尔·兰多夫斯基马塞尔·弗朗索瓦·保罗·兰多夫斯基(法语:Marcel François Paul Landowski,1915年2月18日-1999年12月23日),又译蓝道斯基,波兰裔的法国作曲家。出生于布列塔尼半岛的菲尼斯泰尔省
  • 康沃尔公爵夫人卡米拉女王陛下 爱丁堡公爵殿下康沃尔公爵夫人卡米拉殿下(英语:HRH Camilla, The Duchess of Cornwall,1947年7月17日-),苏格兰称罗撒西公爵夫人(英语:HRH The Duchess of Rothesay),前称卡
  • 德基水库德基水库,原称为达见水库,位于台湾台中市和平区大甲溪上游,即台8线中横公路62公里处,是隶属于台湾电力公司的一个高山型水库。德基水库于1969年12月8日开工兴建,1973年12月水库开
  • 氢燃烧氢燃烧过程在恒星核合成中可以是5倍太阳质量以内的主序星,进行的质子-质子链反应,或是更重的恒星所进行的,以碳氮氧循环为主的反应。这两者都是靠着将氢燃烧成氦的过程来产生恒