CPU-Auslastung vermindern - Delay(100) zuviel?
Also irgendwie reden hier alle aneinander vorbei.
Wenn Netzwerkevents ordentlich von OS mittels WSAAsyncSelect_() an ein Fenster gemeldet und "abgearbeitet" werden, so wird das Programm NUR und auch NUR DANN zu 100% ausgelastet wenn die der Client/ Server auf der anderen Seite auch in der Lage ist das Datenaufkommen so schnell zu verarbeiten.
Das ganze macht auch Sinn! So ist der Request "as fast as possible" abgearbeitet - so wie es sein soll. Warum länger warten wenn das nicht sein muss.
Bei der Entwicklung eines Servers ist das übelst wichtig!
Das Senden von Daten sollte hier sowieso in Threads geschehen (pro Sending ein Thread) um Lasten möglichst gleichmäßig zu verteilen.
Würden keine Threads benutzt hätte das zur Folge das Client B (DSL) auf den Server warten muss weil Client A (ISDN) nicht in der Lage ist die Daten schnellstmöglich zu empfangen und der Socket damit immer in den BlockedMode fällt.
Wenn man es genau macht vergibt man je nach Prozessor noch eine MaxThreads-Variabel welche die maximale Anzahl von Threads auf den Server festlegt. (Somit ist Gewährleistet das alle Clients kontinuierlich mit einer guten Performance bedient werden)
Alle anderen anstehenden Anfragen sollten in einer LinkedList auf abruf gespeichert werden bis wieder freie Threads zur verfügung stehen.
Threads haben noch einen anderen großen Vorteil: Bei mehr Prozessorsystemen oder HT-Pentiums werden die Lasten durch das OS auf alle Prozessoren verteilt. Eine höhere Performance ist das Resultat des ganzen.
So, und NUR SO werden vernünftig funktionierende Netzwerkroutinen programmiert.
Ich hab den Eindruck viele stellen sich das Netzwerkeln einfach zu leicht vor.
Die meisten Sources der Clients/ Server die ich im englischen & deutschen forum gesehen habe kann ich mittels einer ungültigen Abfrage durch ein eigenes Programm einfach so abstürzen lassen. Auch da sollte sich die Programmierer mal gedanken drüber machen. Aber das nur mal so als Off-Topic nebenher.
Gutes gelingen...
Wenn Netzwerkevents ordentlich von OS mittels WSAAsyncSelect_() an ein Fenster gemeldet und "abgearbeitet" werden, so wird das Programm NUR und auch NUR DANN zu 100% ausgelastet wenn die der Client/ Server auf der anderen Seite auch in der Lage ist das Datenaufkommen so schnell zu verarbeiten.
Das ganze macht auch Sinn! So ist der Request "as fast as possible" abgearbeitet - so wie es sein soll. Warum länger warten wenn das nicht sein muss.
Bei der Entwicklung eines Servers ist das übelst wichtig!
Das Senden von Daten sollte hier sowieso in Threads geschehen (pro Sending ein Thread) um Lasten möglichst gleichmäßig zu verteilen.
Würden keine Threads benutzt hätte das zur Folge das Client B (DSL) auf den Server warten muss weil Client A (ISDN) nicht in der Lage ist die Daten schnellstmöglich zu empfangen und der Socket damit immer in den BlockedMode fällt.
Wenn man es genau macht vergibt man je nach Prozessor noch eine MaxThreads-Variabel welche die maximale Anzahl von Threads auf den Server festlegt. (Somit ist Gewährleistet das alle Clients kontinuierlich mit einer guten Performance bedient werden)
Alle anderen anstehenden Anfragen sollten in einer LinkedList auf abruf gespeichert werden bis wieder freie Threads zur verfügung stehen.
Threads haben noch einen anderen großen Vorteil: Bei mehr Prozessorsystemen oder HT-Pentiums werden die Lasten durch das OS auf alle Prozessoren verteilt. Eine höhere Performance ist das Resultat des ganzen.
So, und NUR SO werden vernünftig funktionierende Netzwerkroutinen programmiert.
Ich hab den Eindruck viele stellen sich das Netzwerkeln einfach zu leicht vor.
Die meisten Sources der Clients/ Server die ich im englischen & deutschen forum gesehen habe kann ich mittels einer ungültigen Abfrage durch ein eigenes Programm einfach so abstürzen lassen. Auch da sollte sich die Programmierer mal gedanken drüber machen. Aber das nur mal so als Off-Topic nebenher.
Gutes gelingen...
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
- Andre
- PureBasic Team
- Beiträge: 1765
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
Da das ja dann mehr oder weniger auch das CodeArchiv betrifft, würde ich gerne mal Deine Hilfe zum "Aufräumen" der entsprechenden Sektion im Archiv bzw. Füllen mit "Vorzeige-Codes" in Anspruch nehmen....tranquil hat geschrieben:Die meisten Sources der Clients/ Server die ich im englischen & deutschen forum gesehen habe kann ich mittels einer ungültigen Abfrage durch ein eigenes Programm einfach so abstürzen lassen. Auch da sollte sich die Programmierer mal gedanken drüber machen. Aber das nur mal so als Off-Topic nebenher.

PS: Ist durchaus Ernst gemeint, also wenn Du möchtest + Zeit hast...

Hab grad mal nen kurzen Blick ins CodeArchiv geworfen. Wenn ich folgende Sources sehe dann drehts sich mir im Magen um:
http://www.purearea.net/pb/CodeArchiv/I ... /Server.pb
http://www.purearea.net/pb/CodeArchiv/I ... /Client.pb
http://www.purearea.net/pb/CodeArchiv/I ... bserver.pb
Kein Errorhandling, keine Checks auf gültigkeit etc. etc. Wirklich nur ganz ganz simple Beispiele. Wer sowas in seinen Applikationen benutzt läuft auf kurz oder lang gegen eine Wand. Wenn ich nächste Woche mal etwas Zeit haben sollte werd ich mal nen Network Tutorial schreibseln. Ist glaube ich mal angebraucht.
http://www.purearea.net/pb/CodeArchiv/I ... /Server.pb
http://www.purearea.net/pb/CodeArchiv/I ... /Client.pb
http://www.purearea.net/pb/CodeArchiv/I ... bserver.pb
Kein Errorhandling, keine Checks auf gültigkeit etc. etc. Wirklich nur ganz ganz simple Beispiele. Wer sowas in seinen Applikationen benutzt läuft auf kurz oder lang gegen eine Wand. Wenn ich nächste Woche mal etwas Zeit haben sollte werd ich mal nen Network Tutorial schreibseln. Ist glaube ich mal angebraucht.

- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Nun in erster Linie sind das Examples, weswegen nur ein völliger DAU denken würde, solche CodeSchnippsel wären gegen sämtliche Eventualitäten gefeit.
Wenn ich nen Code-Beispiel mache, schaue ich, dass es so verständlich wie nötig ist, und nicht so angriffsresistent wie möglich.
Ich gehe dann einfach davon aus, dass der fortgeschrittene User sich der Sicherheitslücken durchaus bewusst ist, der Normalo User aber eher verwirrt wäre von solchen Techniken.
Aber nix desto trotz wäre ein fortschrittlicheres Beispiel bestimmt auch nicht verkehrt!
Wenn ich nen Code-Beispiel mache, schaue ich, dass es so verständlich wie nötig ist, und nicht so angriffsresistent wie möglich.
Ich gehe dann einfach davon aus, dass der fortgeschrittene User sich der Sicherheitslücken durchaus bewusst ist, der Normalo User aber eher verwirrt wäre von solchen Techniken.
Aber nix desto trotz wäre ein fortschrittlicheres Beispiel bestimmt auch nicht verkehrt!

- Andre
- PureBasic Team
- Beiträge: 1765
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
Tutorial, jaa....tranquil hat geschrieben:Hab grad mal nen kurzen Blick ins CodeArchiv geworfen. Wenn ich folgende Sources sehe dann drehts sich mir im Magen um:
http://www.purearea.net/pb/CodeArchiv/I ... /Server.pb
http://www.purearea.net/pb/CodeArchiv/I ... /Client.pb
http://www.purearea.net/pb/CodeArchiv/I ... bserver.pb
Kein Errorhandling, keine Checks auf gültigkeit etc. etc. Wirklich nur ganz ganz simple Beispiele. Wer sowas in seinen Applikationen benutzt läuft auf kurz oder lang gegen eine Wand. Wenn ich nächste Woche mal etwas Zeit haben sollte werd ich mal nen Network Tutorial schreibseln. Ist glaube ich mal angebraucht.

Und für die Beispiele denke ich auch in die Richtung wie HeX0R. Wenn es ein fortgeschritteneres Beispiel für das CodeArchiv gäbe (ich weiß jetzt nicht, was ich vielleicht im letzten Jahr bereits an neuen Codes gesammelt habe), könnte man die "simplen" ja drin lassen, aber entsprechend als "Basics" kennzeichnen und auf das umfangreichere Beispiel hinweisen...