2016-06-12 3 views
0

Über das Internet habe ich mehrere Beispiele für die Handhabung eines Dienstes gesehen, der auf Nachrichten von Clients in einer Endlosschleife wartet, einschließlich eines kurzen Schlafs. Beispiel:Was ist der Sinn des Hinzufügens eines kurzen Schlafs zu einer echten Schleife?

while True: 
    check_messages_stack() 
    sleep(0.1) 

Was ist der Sinn des Schlafes dort? Soll es Ressourcen sparen? Wenn es einige Ressourcen spart, wäre es eine sinnvolle Menge?

+0

Die Frage ist ohne Kontext und Besonderheiten nicht wirklich sinnvoll. – pvg

+1

Für weniger CPU-Zyklen. Führen Sie eine while-Schleife aus: while True: pass und 'while True: pass; sleep (.1)', Sie werden einen Unterschied in Ihrer CPU-Nutzung feststellen –

Antwort

0

sleep verwendet keine CPU-Ressourcen, aber ständig ausgeführt check_messages_stack() könnte (je nachdem, was Sie dort haben), also wenn Sie es nicht ständig tun müssen, ist es eine gute Übung, CPU einige Zeit aus.

0

Wenn die Funktion für etwas warten nicht, würde es 100% CPU verbrauchen, durch dass der Schlaf das Hinzufügen, gibt es die CPU einige Zeit andere Prozesse haben gesagt

1

sleep wie die anderen auszuführen entspannt die CPU-Auslastung , aber zusätzlich, wenn es sich um den Zugriff auf Netzwerk-/Web-Daten handelt, wird der Ruhezustand benötigt, um den Host-Server nicht zum Absturz zu bringen und Sie zu sperren.

1

Während Ihr PC läuft, muss Ihre CPU eine Menge Prozesse ausführen (damit Ihr PC läuft). Da CPUs extrem schnell sind, können sie fälschen, um mehrere Aufgaben gleichzeitig auszuführen, aber sie tun es nicht wirklich (heutzutage bekommen wir mehrere Kerne CPU und Multi-Threading, aber vergiss es für diese Erklärung).
Sie führen nur einen Teil eines Prozesses während einer bestimmten Zeit aus, dann einen Teil eines anderen Prozesses, gehen dann zurück zum ersten und so weiter.

Auf einfache Weise kann die CPU auf einen Prozess zu einem anderen wechseln, wenn sie nicht von dem Prozess verwendet wird, der gerade ausgeführt wird, z. B. wenn der Prozess einige E/A ausführt oder auf Benutzerinteraktion wartet.

Wenn Sie eine while true tun, wird es Schleife ASAP es beendet, um die Funktion in der while Schleife auszuführen. Hier bedeutet ASAP so schnell wie möglich, also würde kein anderer Prozess irgendetwas zwischen zwei Schleifen tun können. Weil die CPU kontinuierlich verarbeitet.

Wenn Sie eine sleep setzen, erlauben Sie der CPU, andere Prozesse ausführen zu lassen. Es gibt keinen wirklichen Grund dafür, wie lange der Schlaf ist, da eine zufällige CPU Milliarden von Operationen in einer Mikrosekunde ausführen kann.

Also in Ihrer Frage, die sleep(0.1) ermöglicht Ihrer CPU, einige Operationen zwischen zwei check_messages_stack() Aufruf auszuführen.

Weitere Informationen finden Sie unter "CPU-Planung".