CPU-Auslastung, Game-Loop und Sleep ()

7

Ich habe auf zahlreichen Diskussionsseiten über dieses Thema gelesen, aber ich kann anscheinend keine eindeutige (aktuelle) Antwort finden, und ich hoffe, dies gibt mir weitere Einblicke:

Ich habe den ausgezeichneten Artikel zur Spielschleifenzeit auf Fix your timestep gelesen! Die CPU-Auslastung wird jedoch nicht berücksichtigt, sodass sie zu 100% ausgeführt wird. Meine Frage ist es dann SCHLECHT, in Ihrer Spielschleife mit 100% CPU zu laufen?

  • Wenn nein, warum? Was ist zum Beispiel mit Spielen auf batteriebetriebenen Geräten wie Laptops? Was ist mit Computertemperaturen / Lüftern usw. und anderen Windows-Anwendungen?
  • Wenn ja, warum sollte der Artikel es nicht erwähnen, denn das würde es sicherlich erheblich beeinflussen? Was ist der beste Weg, um dies auf Desktops / PCs zu beheben - gibt es nur den unzuverlässigen Schlaf ()? Wie würde sich dies auf die im Artikel vorgeschlagene Spielschleife auswirken?
KaiserJohaan
quelle
1
In diesem Artikel geht es nicht um eine Spielschleife, sondern darum, den Zeitschritt für Ihre Physik-Engine festzulegen, falls Sie eine Physik-Engine schreiben.
Maik Semder
@MaikSemder Es geht um Zeitschritte für Physik-Engines, aber es könnte für eine Hauptspielschleife mit ein wenig Basteln verwendet werden.
Polar

Antworten:

5

Das Laufen mit 100% CPU ist nicht unbedingt schlecht. Auf der anderen Seite kann es ein ziemlich bedeutendes Problem sein. Grundsätzlich hängt es davon ab, worauf Sie laufen und wie Sie es ausführen. Am besten sehen Sie sich einige Szenarien an, um dies zu zeigen:

Szenario 1

  • Auf einem dedizierten Spielautomaten, bei dem nur das Spiel geöffnet ist

In diesem Fall ist es eine sehr gute Idee, so viel CPU wie möglich für Ihr Spiel zu verwenden. Es wird am Ende schneller laufen und es wird nicht die CPU von irgendetwas stehlen, das es benötigt (die Systemprozesse werden immer noch das bekommen, was sie brauchen, machen Sie sich darüber keine Sorgen).

Szenario 2

  • Auf einem Computer, der auch für Word, das Internet, einige Youtube-Videos (wie in dieser Chrome-Anzeige) usw. verwendet wird.

In diesem Fall führt die Verwendung der gesamten CPU für Ihr Spiel dazu, dass der Benutzer die Festplatte auswirft, sie in zwei Teile zerlegt (wobei die Tatsache ignoriert wird, dass er eine Rückerstattung erhalten könnte), sie in ein Feuer wirft und dann Ihre Foren in Flammen setzt. Scherz beiseite, es ist nie eine gute Idee, die gesamte CPU zu nutzen, wenn die Wahrscheinlichkeit besteht, dass der Benutzer gleichzeitig etwas anderes mit seinem Computer macht.

Eine wichtige Sache, die ebenfalls berücksichtigt werden muss, ist, ob das Ziel einen Einzel- oder einen Mehrkerncomputer hat. Mit einem Single-Core-Computer könnte Ihr Spiel die gesamte Rechenleistung in Anspruch nehmen und alles andere zum Stillstand bringen. Auf der anderen Seite sollte es bei einem Multi-Core-Computer kein Problem geben , wenn Sie nicht beide Kerne voll ausnutzen - Sie werden einen Core belegen, aber für die anderen Anwendungen wird es mehr geben.

Letztendlich hängt es von solchen Problemen ab, ob die Nutzung von 99% der CPU-Zeit eine gute oder eine schlechte Sache ist. Eigentlich ist es nicht, aber es kann Fälle geben, in denen es ist. Denken Sie daran, dass es (auf einem Computer jedenfalls - Spielekonsolen sind eine andere Art) häufig Sache des Computers ist, die CPU-Zeit praktisch verschiedenen Anwendungen zuzuweisen.

Polar
quelle
Eine andere Möglichkeit ist, in den Ruhezustand zu wechseln, wenn das Spiel nicht im Mittelpunkt steht oder wenn innerhalb einer bestimmten Zeitspanne keine Benutzereingaben erkannt wurden (bei einem sich schnell bewegenden Spieltyp kann dies recht niedrig sein), andernfalls wird die CPU verwendet.
Maximus Minimus
Ich dachte daran, der Hauptschleife eine Art Flag hinzuzufügen, das bei Aktivierung einen Sleep (0) auslösen würde. Wenn ich eine Spieleschleife wie die im Artikel habe, könnte ich das sicher tun und davon ausgehen, dass alles wie erwartet läuft, nur mit geringerer CPU-Auslastung?
KaiserJohaan
@KaiserJohaan Warum würdest du einen Schlaf benutzen (0)? Die einzige Zeit, die in Anspruch genommen werden würde, ist der Funktionsaufruf. Nebenbei bemerkt, das Schlafen wäre vollkommen in Ordnung, da es den Timer, der die Frames aussortiert, nicht beeinflusst. Meine einzige Sorge ist, dass es zwei Gründe gibt, warum Sie die gesamte CPU verwenden: 1) ist eine komplizierte Berechnung (benötigt CPU), 2) ist im Leerlauf, in diesem Fall schlafen Sie weg. Die meisten "Hobby" -Spielschleifen schlafen sowieso den Rest der Frames, wenn nichts mehr zu tun ist.
Polar
@ KaiserJohaan Ups, ich meinte den Rest der Zeit im Rahmen schlafen, das war ein massiver Tippfehler: P
Polar
3
Tatsächlich ist Schlaf (0) vollkommen in Ordnung, da der Schlaf dem Betriebssystem mitteilt: "Ich bin für die Dauer meiner Zeitscheibe fertig, lasse einen anderen Prozess etwas tun und plane mich mindestens so viel später ein." Das ist auch der Grund, warum kaum ein Spiel Schlaf in seiner Hauptschleife verwendet. Es gibt keine Garantie dafür, dass das Spiel bald wieder ausgeführt werden kann, was zu starkem Ruckeln in der Bildrate führen kann.
Elva