Es hat mich gerade neulich getroffen. Was passiert eigentlich, wenn ich dem Computer sage, dass er in Standby oder in den Ruhezustand gehen soll?
Genauer gesagt, welche Auswirkungen, wenn überhaupt, auf den laufenden Code haben? Zum Beispiel, wenn eine Anwendung einige Dateien komprimiert, Videodateien kodiert, E-Mails prüft, eine Datenbankabfrage ausführt, Berichte erstellt oder einfach nur viele Daten verarbeitet oder komplizierte mathematische Aufgaben erledigt. Was geschieht? Kann es in deinem Video zu einem Fehler kommen? Kann die Datenbankabfrage fehlschlagen? Kann die Datenverarbeitung Fehler enthalten?
Ich frage das sowohl aus allgemeiner Neugier, als auch, weil ich mich gefragt habe, ob ich darüber nachdenken sollte, wenn ich mich selbst programmiere.
Sie sollten sich daran erinnern, dass das OS (Scheduler) Ihr Programm etwa eine Million Mal pro Sekunde einfriert. Dies bedeutet, dass Ihr Programm bereits gut funktionieren kann, wenn das Betriebssystem es einfriert. Es gibt aus Ihrer Sicht keinen großen Unterschied zwischen Stand-by, Ruhezustand und Kontextwechsel.
Was anders ist, ist, dass du für eine lange Zeit eingefroren bist. Und das ist das Einzige, worüber Sie nachdenken müssen. In den meisten Fällen sollte dies kein Problem sein.
Wenn Sie eine Netzwerkverbindung haben, müssen Sie sie wahrscheinlich erneut einrichten, und ähnliche Probleme. Aber das bedeutet nur, dass Sie in allen IO-Vorgängen auf Fehler prüfen, was Sie sicher schon machen ...: -)
Mein erster Gedanke ist, dass, solange Ihr Programm und sein Ökosystem in dem PC enthalten sind, der in Standby oder Ruhezustand geht, Ihr Programm bei der Wiederaufnahme nicht beeinträchtigt werden sollte.
Wenn Sie jedoch sagen, dass ein Datensatz in einer Datenbank aktualisiert wird, die auf einem separaten Computer gehostet wird, wird Ruhezustand / Standby als Zeitüberschreitung behandelt.
Wenn Ihr Programm von einer solchen Änderung des "Stromstatus" abhängig ist, können Sie WM_POWERBROADCAST Message wie auf msdn
Stand-By hält Ihren "Zustand" am Leben, indem er im RAM bleibt. Wenn Sie die Stromversorgung verlieren, verlieren Sie Ihren gespeicherten "Status".
Aber es macht es schneller zu erreichen.
Ruhezustand speichert Ihren "Status" im virtuellen RAM auf der Festplatte. Wenn Sie also die Stromversorgung verlieren, können Sie drei Tage später wiederkommen. Aber es ist langsamer.
Ich schätze eine Einschränkung mit Stand-By ist, wie viel RAM Sie haben, aber ich bin sicher, dass virtueller RAM von Stand-By verwendet werden muss, wenn es nicht mehr Standard-RAM hat. Ich schaue das aber auf und komme zurück!
Der Wikipedia-Artikel auf ACPI enthält die Details zu den verschiedenen Energiesparmodi, die in modernen PCs vorhanden sind. p>
Hier ist die Grundidee, wie ich die Dinge verstehe:
Die Grundidee besteht darin, den aktuellen Zustand des Systems beizubehalten. Wenn das Gerät wieder in Betrieb genommen wird, kann es wieder in dem Zustand sein, in dem es war, bevor das Gerät in den Ruhezustand / Standby / Ruhezustand gesetzt wurde davon als Serialisierung für Ihren PC.
Im Standby-Modus wird der Computer weiterhin Strom in den RAM-Speicher einspeisen, da der Hauptspeicher flüchtiger Speicher ist, der ständig benötigt wird erfrischend , um an seinem Zustand festzuhalten. Dies bedeutet, dass die Festplatten, die CPU und andere Komponenten ausgeschaltet werden können, solange genügend Energie zur Verfügung steht, damit der DRAM aktualisiert wird, damit sein Inhalt nicht verschwindet.
Im Ruhezustand wird der Hauptspeicher ebenfalls ausgeschaltet, so dass der Inhalt vor dem Ausschalten des Systems in einen permanenten Speicher wie eine Festplatte kopiert werden muss. Abgesehen davon unterscheidet sich die Grundprämisse der Hiberation nicht von der Bereitschaft - den aktuellen Zustand der Maschine zu speichern, um sie zu einem späteren Zeitpunkt wiederherzustellen.
In Anbetracht dessen ist es wahrscheinlich nicht sehr wahrscheinlich, dass das Wechseln in den Standby-Modus oder den Ruhezustand Probleme bei gerade ausgeführten Aufgaben verursacht. Es ist jedoch möglicherweise keine gute Idee, die Netzwerkaktivität mitten in der Ausführung zu stoppen, da Ihre Netzwerkverbindung je nach Protokoll eine Zeitüberschreitung aufweisen und nicht fortgesetzt werden kann, wenn das System in den Betriebszustand versetzt wird.
Außerdem gibt es einige Maschinen, die nur flockige Energiespartreiber haben, die dazu führen können, dass sie in den Standby-Modus wechselt und nie wieder zurückkehrt, aber das ist ein ganz anderes Problem.
Es gibt einige Auswirkungen auf Ihren Code. Der Ruhezustand ist mehr als nur ein Kontextwechsel vom Scheduler. Netzwerkverbindungen werden geschlossen, Netzwerklaufwerke oder Wechseldatenträger werden möglicherweise während des Ruhezustands getrennt, ...
Ich glaube nicht, dass Ihre Anwendung über den Ruhezustand informiert werden kann (aber ich könnte falsch liegen). Was Sie tun sollten, ist Fehlerszenarien (Verlust der Netzwerkkonnektivität zum Beispiel) so anmutig wie möglich zu behandeln. Beachten Sie, dass dieses Fehlerszenario auch während des normalen Betriebs auftreten kann, nicht nur, wenn Sie in den Ruhezustand wechseln ...
Tags und Links language-agnostic operating-system