Language agnostic 在待机和休眠期间会发生什么?

Language agnostic 在待机和休眠期间会发生什么?,language-agnostic,operating-system,Language Agnostic,Operating System,前几天我突然想到了。当我告诉计算机进入待机或休眠状态时,实际会发生什么 更具体地说,它对正在运行的代码有什么影响(如果有的话)?例如,如果应用程序正在压缩某些文件、编码视频文件、检查电子邮件、运行数据库查询、生成报告或只是处理大量数据或做复杂的数学工作。会发生什么?你会在视频中出现bug吗?数据库查询会失败吗?数据处理最终会包含错误吗 我问这个问题既是出于一般的好奇,也是因为我开始怀疑这是否是我自己编程时应该考虑的问题。待机通过将“状态”保存在RAM中来保持“状态”。因此,如果您失去电源,您将失

前几天我突然想到了。当我告诉计算机进入待机或休眠状态时,实际会发生什么

更具体地说,它对正在运行的代码有什么影响(如果有的话)?例如,如果应用程序正在压缩某些文件、编码视频文件、检查电子邮件、运行数据库查询、生成报告或只是处理大量数据或做复杂的数学工作。会发生什么?你会在视频中出现bug吗?数据库查询会失败吗?数据处理最终会包含错误吗

我问这个问题既是出于一般的好奇,也是因为我开始怀疑这是否是我自己编程时应该考虑的问题。

待机通过将“状态”保存在RAM中来保持“状态”。因此,如果您失去电源,您将失去存储的“状态”

但这会加快实现目标的速度

休眠将您的“状态”存储在硬盘上的虚拟RAM中,因此,如果您断电,您仍然可以在三天后返回。但速度较慢


我猜备用内存的一个限制是你有多少内存,但我确信当虚拟内存用完标准内存时,备用内存必须使用虚拟内存。不过我会查一下然后回来

您应该记住,操作系统(调度程序)每秒冻结您的程序大约一百万次。这意味着,当操作系统冻结程序时,它已经可以很好地运行了。在您看来,备用、休眠和上下文切换之间没有太大区别

不同的是你会被冻结很长时间。这是你唯一需要考虑的事情。在大多数情况下,这不应该是一个问题

如果你有一个网络连接,你可能需要重新建立它,以及类似的问题。但这只意味着检查所有IO操作中的错误,我相信您已经在做…:-)

维基百科关于的文章详细介绍了现代个人电脑中存在的不同节能模式

以下是我如何理解事物的基本想法:

其基本思想是保持系统的当前状态不变,这样当机器恢复运行时,它可以恢复到机器进入睡眠/待机/休眠等状态之前的状态。可以将其视为电脑的序列化

在待机状态下,计算机将继续向RAM供电,因为主存储器需要保持恒定状态。这意味着硬盘驱动器、CPU和其他组件可以关闭,只要有足够的电源使DRAM保持刷新以防止其内容消失

在休眠状态下,主内存也将关闭,因此在关闭系统电源之前,必须将内容复制到永久存储器(如硬盘驱动器)。除此之外,Hibiation的基本前提与待机状态没有区别——存储机器的当前状态,以便在以后恢复

考虑到这一点,进入待机或休眠状态可能不会导致当前正在执行的任务出现问题。但是,在执行过程中允许网络活动停止是不好的,因为根据协议,网络连接可能超时,并且在将系统返回到其运行状态后无法恢复。
此外,可能有些机器的节能驱动程序不稳定,这可能会导致它进入待机状态,再也不会回来,但这是一个完全不同的问题。

我最初的想法是,只要你的程序及其生态系统包含在正在待机或休眠的pc中,那么,恢复后,您的程序不应受到影响

但是,如果您要更新托管在单独计算机上的某个数据库中的记录,那么休眠/备用将被视为超时


如果您的程序依赖于“电源状态”的这种变化,您可以收听上提到的WM_POWERBROADCAST消息,这对您的代码有一些启示。休眠不仅仅是来自调度程序的上下文切换。网络连接将关闭,网络驱动器或可移动媒体可能在休眠期间断开连接


我不认为您的应用程序会收到休眠通知(但我可能错了)。您应该尽可能优雅地处理错误场景(例如网络连接丢失)。请注意,这些错误场景也可能发生在正常操作过程中,不仅是在进入休眠状态时…

我们让计算机休眠,它只是将RAM的内容写入磁盘。下次启动时,它会从磁盘恢复RAM的内容。当操作系统耗尽标准RAM时,它会将数据写入磁盘,这称为分页:)而且,顺便说一句,当pc正常运行时也会发生分页(如果你耗尽RAM,那就是)@Philippe-这就是我要说的;hibernate将RAM中的内容存储在HDDThanks上,以便在msdn上记录WM_POWERBROADCAST消息!如果应用程序需要重新建立网络连接或其他东西,这可能非常有用=)还请注意,在prinicple standby/hibernate中,应将所有硬件恢复到其旧状态(RAM、CPU、图形等),这可能不适用于所有硬件。因此,某些硬件可能无法正常“唤醒”。通常情况下,这种情况只会发生在不好的驱动程序上,但这是需要注意的,特别是对于不寻常的硬件(例如特殊接口卡)。