2016-04-11 5 views
-5

Ich habe gehört, die sagen können:Energieeffizienz in C während Loops & Polling

while(1){ 
    i = !2; 
    wait(1); 
} 

energieeffizient ist. Wird diese While-Schleife bei i != 2 angehalten und wird daher nicht abgefragt? Lassen Sie uns sagen:

while(x == 3){ 
    if(c == 3){ 
     x = 4; 
    } 
    wait(1); 
} 

Enthält diese ein ähnliches Konzept verfolgen oder ist i = !2 eine Prozedur, die erfüllt werden müssen, die while-Schleife weitermachen? Würdest du sagen, dass dies genauso energieeffizient ist? Ist das zweite Beispiel ähnlich dem ersten hinsichtlich der Energieeffizienz?

Ein Beispiel i schlechte Leistung effizient Polling gezeigt habe, ist:

while (x == 3) { } 
+1

Ihre erste Schleife wird niemals beendet. Meintest du vielleicht 'while (i) {', möglicherweise? Eigentlich sehe ich auch nicht, wie die anderen beiden enden würden, außer 'x' oder' c' wird von einem anderen Thread modifiziert. –

+2

Warum sollte es bei "i =! 2" aufhören? Das ist nur eine Aufgabe, es passiert sofort. Beide Loops stoppen nur, wenn sie 'wait (1)' bekommen. – Barmar

+0

Ein C-Compiler kümmert sich nicht um "Macht". Ein guter optimierender Compiler verschiebt die Zuweisung in Ihrem ersten Beispiel aus der Schleife. – usr2564301

Antwort

0

Das Wichtigste aus Effizienzgesichtspunkten ist, dass der Code nicht nur ständig Zyklus der Fall ist. In Ihrem Beispiel gibt die Funktion wait() wahrscheinlich die Kontrolle an Ihr Betriebssystem zurück, sodass sofort eine andere Aufgabe gesendet werden kann.

Kurz gesagt, Ihr zweites Beispiel ist ebenfalls energieeffizient, vorausgesetzt, wait() gibt die Steuerung an das Betriebssystem zurück.