首先,在很多情况下,Sleep()
被误用,例如“同步”线程或定期轮询通知函数会调用的值。 (例如,在 Win32 WaitForSingleObject
中)
但是其他用例呢? Sleep
总是邪恶的吗?如果不是,Sleep
的良好用例有哪些?如果是,为什么几乎所有语言都有某种 Sleep
语句?
PS:我问这个问题是因为 another 的评论之一问题。 OP 指出,在他看来,应该避免 Sleep
,就像 goto
一样。
最佳答案
我实际上相信您链接的断言是正确的。问题是 sleep (正如您所指出的)被用作通知机制的低效替代品。 如果您正在等待事件, sleep 总是不如正确实现的通知机制。如果您确实需要等待某件事特定时间,那么 sleep 是合适的。
例如,在某些网络协议(protocol)中,您使用一种称为指数退避的技术,如果您检测到网络上发生冲突,则需要在重试之前等待随机(且呈指数增长)的时间。在这种情况下, sleep 是合适的,因为您不是在尝试等待事件发生,而是在尝试等待特定的时间过去。
关于language-agnostic - Sleep() 是邪恶的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1096794/