Ich habe diesen Satz viel gehört. Was heißt das?
Ein Beispiel würde helfen.
Ich habe diesen Satz viel gehört. Was heißt das?
Ein Beispiel würde helfen.
Antworten:
Aus Wiktionary :
Für Fall 1 ist es wahrscheinlich wie
for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
while (condition == false) {}
besseres Beispiel, von den obigen Kommentaren fortzufahren?
Ich denke, der Ausdruck wird im Allgemeinen verwendet, um eine Schleife zu bezeichnen, die viele Male iteriert und die die Leistung des Programms ernsthaft beeinträchtigen kann - das heißt, sie kann viele CPU-Zyklen verwenden. Normalerweise würden Sie diesen Satz in einer Diskussion über Optimierung hören.
Zum Beispiel denke ich an Spiele, bei denen eine Schleife möglicherweise jedes Pixel auf dem Bildschirm verarbeiten muss, oder an eine wissenschaftliche App, bei der eine Schleife Einträge in riesigen Arrays von Datenpunkten verarbeitet.
Das Video Jon Skeet und Tony the Pony enthält ein gutes Beispiel für eine enge Schleife (~ Endlosschleife) .
Das Beispiel ist:
while(text.IndexOf(" ") != -1) text = text.Replace(" ", " ");
Dies erzeugt eine enge Schleife, da IndexOf
ein Unicode-Zeichen mit der Breite Null ignoriert wird (wodurch zwei benachbarte Leerzeichen gefunden werden), diese Replace
jedoch nicht ignoriert werden (wodurch keine benachbarten Leerzeichen ersetzt werden).
Die anderen Antworten enthalten bereits gute Definitionen, daher erwähne ich sie nicht noch einmal.
Die Antwort von SandeepJ ist die richtige im Zusammenhang mit Netzwerkgeräten (siehe beispielsweise Wikipedia-Eintrag auf Middlebox), die sich mit Paketen befassen. Ich möchte hinzufügen, dass der Thread / die Task, die die enge Schleife ausführt, versucht, auf einer einzelnen CPU geplant zu bleiben und den Kontext nicht auszuschalten.
Laut Webster's Dictionary "Eine Codeschleife, die ausgeführt wird, ohne Ressourcen für andere Programme oder das Betriebssystem freizugeben."
http://www.websters-online-dictionary.org/ti/tight+loop.html
Aus Erfahrung habe ich festgestellt, dass Sie, wenn Sie jemals versuchen, eine Schleife zu erstellen, die auf unbestimmte Zeit ausgeführt wird, zum Beispiel:
while(true)
{
//do some processing
}
Eine solche Schleife ist höchstwahrscheinlich immer ressourcenintensiv. Wenn Sie die CPU- und Speicherauslastung durch den Prozess mit dieser Schleife überprüfen, werden Sie feststellen, dass sie in die Höhe geschossen ist. Dies ist die Idee, die manche Leute als "enge Schleife" bezeichnen.
Viele Programmierumgebungen setzen den Programmierer heutzutage nicht den Bedingungen aus, die eine enge Schleife erfordern, z. B. Java-Webdienste, die in einem Container ausgeführt werden, der Ihren Code aufruft, und Sie müssen Schleifen innerhalb einer Servlet-Implementierung minimieren / beseitigen. Systeme wie Node.js behandeln die enge Schleife, und auch hier sollten Sie Schleifen in Ihrem eigenen Code minimieren / beseitigen. Sie werden in Fällen verwendet, in denen Sie die vollständige Kontrolle über die Programmausführung haben, z. B. Betriebssystem oder Echtzeit- / eingebettete Umgebungen. Im Fall eines Betriebssystems können Sie sich vorstellen, dass sich die CPU im Leerlauf befindet, als die Zeit, die sie in der engen Schleife verbringt, da in der engen Schleife überprüft wird, ob andere Prozesse ausgeführt werden müssen oder ob sie vorhanden sind sind Warteschlangen, die gewartet werden müssen. Wenn also keine Prozesse ausgeführt werden müssen und die Warteschlangen leer sind, flitzt die CPU nur durch die enge Schleife und dies erzeugt einen fiktiven Hinweis darauf, wie "nicht beschäftigt" die CPU ist. Eine enge Schleife sollte so konzipiert sein, dass sie nur Überprüfungen durchführt, damit sie wie eine große Liste von if .. then-Anweisungen wird, sodass sie in Assembly auf einen COMPARE-Operanden und dann auf einen Zweig hinausläuft, sodass sie sehr effizient ist. Wenn alle Überprüfungen dazu führen, dass keine Verzweigung erfolgt, kann die enge Schleife millionenfach pro Sekunde ausgeführt werden. Betriebssysteme / eingebettete Systeme haben normalerweise eine gewisse Erkennung für CPU-Hogging, um Fälle zu behandeln, in denen ein Prozess die Kontrolle über die CPU nicht aufgegeben hat - Überprüfungen für diese Art von Vorkommen könnten in der engen Schleife durchgeführt werden. Letztendlich müssen Sie verstehen, dass ein Programm irgendwann eine Schleife haben muss, sonst könnten Sie mit einer CPU nichts Nützliches tun. Wenn Sie also nie die Notwendigkeit einer Schleife sehen, liegt dies daran, dass Ihre Umgebung all das für Sie erledigt. Eine CPU führt so lange Anweisungen aus, bis nichts mehr auszuführen ist oder Sie einen Absturz erleiden. Daher muss ein Programm wie ein Betriebssystem eine enge Schleife haben, damit es tatsächlich funktioniert, da es sonst nur Mikrosekunden lang ausgeführt wird. Letztendlich müssen Sie verstehen, dass ein Programm irgendwann eine Schleife haben muss, sonst könnten Sie mit einer CPU nichts Nützliches tun. Wenn Sie also nie die Notwendigkeit einer Schleife sehen, liegt dies daran, dass Ihre Umgebung all das für Sie erledigt. Eine CPU führt so lange Anweisungen aus, bis nichts mehr auszuführen ist oder Sie einen Absturz erleiden. Daher muss ein Programm wie ein Betriebssystem eine enge Schleife haben, damit es tatsächlich funktioniert, da es sonst nur Mikrosekunden lang ausgeführt wird. Letztendlich müssen Sie verstehen, dass ein Programm irgendwann eine Schleife haben muss, sonst könnten Sie mit einer CPU nichts Nützliches tun. Wenn Sie also nie die Notwendigkeit einer Schleife sehen, liegt dies daran, dass Ihre Umgebung all das für Sie erledigt. Eine CPU führt so lange Anweisungen aus, bis nichts mehr auszuführen ist oder ein Absturz auftritt. Daher muss ein Programm wie ein Betriebssystem eine enge Schleife haben, damit es tatsächlich funktioniert, da es sonst nur Mikrosekunden lang ausgeführt wird.