Seite 1 von 1
CPU-Auslastung beim Server reduzieren
Verfasst: 02.10.2004 16:01
von pcnerd
Bisher progge ich alle Server mit einer Mainloop,
z.B.
Code: Alles auswählen
repeat
if networkserverevent()=1
blabla
endif
if networkserverevent()=2
.
.
.
.
until quit=1
end
oder
Code: Alles auswählen
repeat
select networkserverevent()
case 1
.
.
case 2
.
.
default
endselect
until quit=1
end
die die CPU voll auslastet. Ich meine, bei den Beispielen, läuft es ja
von aussen gesehen auf das selbe hinaus.
Ich wollte fragen, ob es nicht andere Möglichkeiten gibt ein Serverprogramm zu proggen, bei dem die CPU-Auslastung möglichst gering ist.
Verfasst: 02.10.2004 16:24
von Franky
Bau doch mal ein Delay(1) ein
Verfasst: 02.10.2004 20:08
von Icke
Am besten so damit deine Schleife bei Aktivität nich ausgebremst wird :
Re: CPU-Auslastung beim Server reduzieren
Verfasst: 27.04.2023 17:33
von Taz
Sorry, das ich den alten Beitrag ausgrabe...
So einfach scheint es leider doch nicht zu sein, bzw.
ja die CPU last singt!
ABER, beim verschicken vieler Nachrichten in folge, dauert das verschicken gut doppelt so lange.
In meiner Anwendung, geht die dauer von ca. 850ms auf 1700 ms hoch
Code: Alles auswählen
Event = NetworkServerEvent(#SVRID)
If Event
...
Else
Delay(1)
EndIf
Jemand ne Idee?
Re: CPU-Auslastung beim Server reduzieren
Verfasst: 27.04.2023 18:00
von NicTheQuick
Es ist keine gute Idee NetworkServerEvent() mehrmals in einer Schleife aufzurufen. Man macht das einmalig wie bei WaitWindowEvent() und arbeitet dann mit dem Rückgabewert.
Code: Alles auswählen
Select NetworkServerEvent(ServerID)
Case #PB_NetworkEvent_None
Delay(0)
Case #PB_NetworkEvent_Data
;Lies Daten
Case #PB_NetworkEvent_Connect
;Neue TCP-Verbindung
Case #PB_NetworkEvent_Disconnect
;TCP-Verbindung wurde geschlossen
EndSelect
Das Delay(0) sollte eigentlich ausreichen den Kontext-Switch der CPU zu triggern, damit andere Threads rankommen. Und wenn das nicht reicht, dann eben ein Delay(1), aber besser nicht höher. Wir müssen so nah an einem busy-wait dran bleiben wie möglich.
Wenn deine CPU dann immer noch zu sehr ausgelastet ist, versendest du entweder zu viele Daten, oder irgendwas anderes bringt deine CPU zum Glühen, aber der Teil sollte es nicht sein.
Re: CPU-Auslastung beim Server reduzieren
Verfasst: 28.04.2023 04:36
von Taz
Sorry, ich glaube meine Behauptung war falsch.
Der Fehler liegt wahrscheinlich in meinem Programm, ich muss das mal gründlich untersuchen

Re: CPU-Auslastung beim Server reduzieren
Verfasst: 28.04.2023 23:14
von Qnode
Meine Güte, nun mach dich nicht künstlich klein! Aus Sicht eines Hobbyprogrammierers ist die Frage mehr als berechtigt!
Re: CPU-Auslastung beim Server reduzieren
Verfasst: 29.04.2023 12:26
von NicTheQuick
Wir sind auf jeden Fall neugierig darauf wo das Problem am Ende steckte. Das kannst du gerne nochmal ausführen. Dann kann jeder davon lernen.
Re: CPU-Auslastung beim Server reduzieren
Verfasst: 30.04.2023 00:30
von Taz
Werde ich machen, wobei das ganze Netzwerk Gedöns leider nicht wirklich einfach ist
Meine Probleme die ich atm habe sind:
Entweder ist das ganz sau schnell, aber dann werden Pakete(Texte) vergessen/verschluckt...
Situation 1:
Der Client verschickt einfach mehrere Texte, ohne auf eine Antwort vom Server zu warten.
Der Server bekommt dann relativ schnell die Disconnect Message vom Client, und beendet die Verbindung, ohne alle Texte empfangen zu haben.
Situation 2:
Wartet der Client erst auf die Antwort vom Server, bevor der nächste Text verschickt wird dauert es um ein
vielfaches länger, obwohl nur ein Byte als Bestätigung gesendet wird.

Re: CPU-Auslastung beim Server reduzieren
Verfasst: 30.04.2023 11:01
von HeX0R
Ich gehe mal davon aus, dass Du in Situation 1 den Rückgabewert von SendNetworkData() ignorierst.
Er kann nunmal nicht mehr Daten in den Ausgangspuffer schieben, als da reinpassen, bist Du am Anschlag, gibt SendNetworkData() eine -1 zurück.
Dann muss man üblichweise etwas warten und neu senden.
Allerdings muss man eigentlich auch schauen, warum da eine -1 zurück kam, das geht aber leider nur per OS API, siehe auch:
https://www.purebasic.fr/english/viewto ... 5&start=30