gpt4 book ai didi

c# - sleep block 程序是否退出?它是如何实现的?

转载 作者:太空狗 更新时间:2023-10-29 22:57:33 25 4
gpt4 key购买 nike

在单线程控制台应用程序中,人们经常使用 Thread.Sleep 作为暂停应用程序一段时间的惰性方法。

这个问题提出了关于不使用这种方法的有趣观点:Why is Thread.Sleep so harmful

但是,除了知道 Sleep 会阻塞当前线程外,我不明白它是如何工作的——例如,它是在一个紧密的循环中最大化 CPU 内核还是实际上暂停了线程?

对我来说更重要的是,控制台应用程序在进入休眠状态时如何响应各种应用程序退出场景(CTRL-C、终止、窗口关闭按钮)?它会盲目地继续执行直到操作系统强制终止它,还是会表现良好?

最佳答案

与 C#/.NET 相关的问题相比,这更像是一个操作系统问题,但我会尽量简洁地回答。

Thread.Sleep 不会自旋锁定您的 CPU,而是调用底层操作系统中的适当机制来挂起您的线程。在 Windows 上,该功能在此处描述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx

使用这个正常的系统调用,你的线程不能被重新安排,直到超时结束。然后需要强制终止线程(或整个进程)。

当您在 cmd.exe 中按下 ctrl+c 时,控制台会在附加的每个进程中生成一个新线程来处理事件(此处描述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682541(v=vs.85).aspx)。因此,当您按下 ctrl+c 时,您的程序作为一个整体仍将“表现良好”,但您的休眠线程本身将被过早杀死。

关于c# - sleep block 程序是否退出?它是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37662823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com