Hilft time.sleep dem Prozessor?

8

Kürzlich war ich auf Stack Overflow (Python) surfen und sah diesen Beitrag , wo Aaron Hall behauptet,

  

läuft ständig, während Loops viel Rechenleistung verbrauchen können. Das Hinzufügen einer Schlafperiode (auch nur eine Sekunde) kann diese Nutzung stark reduzieren.

Stimmt es wirklich? Und wenn ja, wie kommt es? Gilt dieselbe Regel auch für andere Programmiersprachen (d. H. C ++)?

    
SnuKies 18.07.2016, 13:14
quelle

1 Antwort

9

TL; DR Wenn Sie nach einem Ereignis suchen, das einmal pro Minute auftritt, möchten Sie möglicherweise nicht jede Nanosekunde überprüfen.

Ja, das stimmt wirklich. Das Schlafen in einem Thread reduziert die CPU-Auslastung dieses Threads. Während ein Thread schläft, verbraucht er kaum CPU-Zeit.

Ja, dies gilt für fast alle Sprachen, solange das Einschlafen mithilfe der nativen Threading-API des Betriebssystems implementiert wird.

Um dies intuitiv zu betrachten, betrachten wir eine vereinfachte Version des Programms aus der verknüpften Frage:

%Vor%

Lasst uns nun die Welt vereinfachen und annehmen, dass das Programm der einzige Prozess ist, der auf dem Prozessor läuft.

Nehmen wir auch an, dass die zeitbasierte Bedingung einmal pro Minute wahr ist. Nehmen wir auch an, dass die Ausführung von end_condition_expression und time_based_condition_expression 10 Nanosekunden CPU-Zeit kostet.

Wie viel CPU-Zeit wird dies innerhalb einer Minute verbrauchen? Genau eine Minute == 60 000 000 000 Nanosekunden . Die CPU-Nutzung wird während der gesamten Zeit 100% betragen. Die Schleife wird sechs Milliarden Mal wiederholt.

Betrachten Sie nun diese Variante des Programms:

%Vor%

Wie oft wird die Schleife innerhalb einer Minute ausgeführt? 60 Iterationen. Wie viel CPU-Zeit wird dies innerhalb einer Minute verbrauchen? 60 * 10 ns = 600 ns . Das ist ein Hundertmillionstel dessen, was die nicht-schlafende Version des Programms verwendet.

In der Realität gibt es einen gewissen Overhead vom Call in den Sleep, und die CPU-Zeit wird mit anderen Prozessen geteilt, und ein Scheduler ist involviert, und die genaue CPU-Nutzung stimmt nicht genau mit meinen Annahmen überein bleibt gleich.

    
user2079303 18.07.2016, 15:22
quelle

Tags und Links