2009-05-27 7 views
8

Es hat mich gerade neulich getroffen. Was passiert eigentlich, wenn ich dem Computer sage, dass er in Standby oder in den Ruhezustand gehen soll?Was passiert während Standby und Ruhezustand?

Genauer gesagt, welche Auswirkungen, wenn überhaupt, hat es auf Code, der ausgeführt wird? 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 dies sowohl aus allgemeiner Neugier, sondern auch, weil ich anfing mich zu fragen, ob das etwas ist, worüber ich nachdenken sollte, wenn ich mich programmiere.

Antwort

6

Sie sollten sich daran erinnern, dass das OS (Scheduler) Ihr Programm ungefähr 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, Hibernate und Kontextwechsel.

Was ist anders ist, dass Sie für eine lange Zeit eingefroren werden. Und das ist das Einzige, worüber Sie nachdenken müssen. In den meisten Fällen sollte dies kein Problem darstellen.

Wenn Sie eine Netzwerkverbindung haben, müssen Sie sie wahrscheinlich wiederherstellen, und ähnliche Probleme. Aber das bedeutet nur, auf Fehler in allen IO-Operationen zu prüfen, was Sie sicher schon machen ... :-)

+0

Das ist ein sehr guter Punkt. Dachte nie darüber nach! – Svish

+0

Beachten Sie auch, dass im Standby/Ruhezustand * alle * Hardware in ihrem alten Zustand (RAM, CPU, Grafik usw.) wiederhergestellt werden sollte. Dies funktioniert möglicherweise nicht für alle Hardware. Daher kann es sein, dass einige Hardware nicht richtig aufwacht. Normalerweise passiert das nur mit schlechten Treibern, aber es ist etwas, auf das man besonders bei ungewöhnlicher Hardware achten sollte (z. B. spezielle Schnittstellenkarten). – sleske

2

Stand-by hält Ihren "Zustand" am Leben, indem er im RAM gehalten wird. Wenn Sie also die Stromversorgung verlieren, verlieren Sie Ihren gespeicherten "Zustand".

Aber es macht es schneller zu erreichen.

Ruhezustand speichert Ihren "Zustand" in virtuellem 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 über Standard-RAM verfügt. Ich werde das aber nachsehen und zurückkommen!

+0

Wir den Computer überwintert, schreibt es einfach den Inhalt des RAM auf der Festplatte. Wenn Sie das nächste Mal booten, wird der Inhalt des RAM von der Festplatte wiederhergestellt. Wenn das Betriebssystem nicht mehr über Standard-RAM verfügt, schreibt es Zeug auf die Festplatte, das nennt man Paging :) – Philippe

+0

Und, AFAIK, Paging passiert, wenn der PC auch normal läuft (wenn Sie keinen RAM mehr haben) – Svish

+0

@Philippe - Sag ich doch; Hibernate nimmt den Inhalt Ihres RAM und legt es auf der Festplatte – joshcomley

1

Der Wikipedia-Artikel auf enthält die Details über die verschiedenen Energiesparmodi, die in vorhanden sind moderne PCs.

Hier ist die Grundidee, aus wie ich die Dinge verstehen:

Die Grundidee ist der aktuelle Zustand des Systems zu halten beibehalten, so dass, wenn die Maschine wieder in Betrieb genommen wird, kann er in dem Zustand wieder aufnimmt es war, bevor die Maschine in den Ruhezustand/Standby/Ruhezustand gebracht wurde, usw. Betrachten Sie es als Serialisierung für Ihren PC.

Im Standby-Modus wird der Computer weiterhin Strom in den RAM-Speicher einspeisen, da der Hauptspeicher ist, der refreshing konstant halten muss. Dies bedeutet, dass die Festplatten, die CPU und andere Komponenten ausgeschaltet werden können, solange genügend Energie vorhanden ist, um den DRAM so zu aktualisieren, dass sein Inhalt nicht verloren geht.

Im Ruhezustand wird der Hauptspeicher ebenfalls deaktiviert, 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.

Vor diesem Hintergrund ist es wahrscheinlich nicht sehr wahrscheinlich, dass das Wechseln in den Standby-Modus oder den Ruhezustand Probleme bei derzeit ausgeführten Tasks verursacht. Es ist jedoch möglicherweise keine gute Idee, die Netzwerkaktivität mitten in der Ausführung zu stoppen, da die Netzwerkverbindung je nach Protokoll eine Zeitüberschreitung aufweisen und nicht fortgesetzt werden kann, wenn das System wieder in den aktiven Zustand versetzt wird.

Es kann auch sein, dass einige Maschinen nur flockige Energiespartreiber haben, die dazu führen können, dass sie in den Standby-Modus geht und nie wieder zurückkehrt, aber das ist ein ganz anderes Problem.

3

Mein erster Gedanke ist, dass, solange Ihr Programm und sein Ökosystem in dem PC enthalten ist, der in Standby oder Ruhezustand geht, sollte Ihr Programm bei der Wiederaufnahme nicht beeinträchtigt werden.

Wenn Sie jedoch sagen, dass ein Datensatz in einer Datenbank aktualisiert wird, die auf einem separaten Computer gehostet wird, wird der Ruhezustand/Standby-Modus als Zeitüberschreitung behandelt.

Wenn Ihr Programm ist auf einen solchen Wechsel abhängig in „Energiestatus“ können Sie auf WM_POWERBROADCAST Nachricht hören, wie auf msdn erwähnt

+0

Vielen Dank für die Nachricht WM_POWERBROADCAST auf msdn! Kann sehr hilfreich sein, wenn eine Anwendung eine Netzwerkverbindung oder etwas wiederherstellen muss =) – Svish

0

Es gibt einige Auswirkungen auf Ihren Code. Der Ruhezustand ist mehr als nur ein Kontextwechsel vom Scheduler. Netzwerkverbindungen werden geschlossen, Netzwerklaufwerke oder Wechseldatenträger können während des Ruhezustands getrennt werden, ...

Ich glaube nicht, dass Ihre Anwendung über den Ruhezustand benachrichtigt 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. Und beachten Sie, dass diese Fehlerszenario auch während des normalen Betriebs auftreten kann, nicht nur beim Wechsel in den Ruhezustand ...

Verwandte Themen