为什么要睡觉1



我知道,在一个无休止的循环或其他地方,你可以休眠(0),让操作系统执行上下文切换并执行另一个线程(如果有并且准备执行)。现在,我看到了一堆代码,其中人们使用sleep(1)而不是sleep(0)。

这是最优的吗
我在哪里可以找到有关它的文档?

如果您正在实现类似"检查文件是否存在,重复直到它存在,然后继续"的操作,最好进行睡眠(some_small_positive_number),这样就不会占用100%的CPU时间。

在程序中使用这样的轮询循环时,几乎总是计划不当的迹象,但在命令行脚本中经常使用。

99.9%的情况下,这种短循环是设计不佳、对线程间通信理解不足或懒惰的症状,因为轮询似乎更容易。

多线程调用中的大多数while(true)循环根本不需要Sleep()调用,因为它们会阻塞其他调用、I/O或线程间同步对象。

在循环不阻塞任何内容的情况下,如果正在完成的工作正在取得真正的进展,则仍然不需要sleep()调用。放入sleep()调用只会减慢实际工作的速度。如果工作对整个系统产生了不良影响,请降低工作线程的优先级,而不是强行调用sleep()。

邪恶的循环纯粹是为了轮询标志。这种情况经常发生,以至于sleep()本身经常被认为是本质上的邪恶。事实并非如此——应该停止滥用它。

在现代操作系统上,需要轮询的内容并不多。例如,文件系统在创建文件时发出通知,从而消除了持续检查的需要,并消除了sleep()循环的延迟和CPU浪费。

相关内容

  • 没有找到相关文章

最新更新