Eigener Prozess ist schneller als Thread
Hallo
Ich muss zu Demonstrationszwecken sehr viele Post-Requests in kürzester Zeit an meinen Server machen (nein, kein DoS, mein Server verkraftet das).
Jetzt ist das Problem wie sich das realisieren lässt.
Wenn ich das Programm mit 20 Threads öffne, hab ich nicht doppelt so viele Anfragen wie wenn ich das Programm mit nur 10 Threads starte.
Wenn ich allerdings das ganze Programm mit je 10 Threads zwei mal gleichzeitig öffne, dann schon.
Zudem kommt es mir so vor, als kann mein Programme nicht die volle Bandbreite nutzen, da der Download nur bis maximal 2,2 mbps geht, obwohl ich 16 mbps habe, wenn ich in Browser einen Speedtest mach.
Darum:
Wie kann ich es machen, dass jeder Thread die maximale Leistung zugeordnet bekommt?
Ich hab schon nachgedacht, das Programm mehrfach zu öffnen und sie untereinander über Streams kommunizieren könnten...
Ich verwende C# unter Windows 10.
Gruß
Chris
Ich muss zu Demonstrationszwecken sehr viele Post-Requests in kürzester Zeit an meinen Server machen (nein, kein DoS, mein Server verkraftet das).
Jetzt ist das Problem wie sich das realisieren lässt.
Wenn ich das Programm mit 20 Threads öffne, hab ich nicht doppelt so viele Anfragen wie wenn ich das Programm mit nur 10 Threads starte.
Wenn ich allerdings das ganze Programm mit je 10 Threads zwei mal gleichzeitig öffne, dann schon.
Zudem kommt es mir so vor, als kann mein Programme nicht die volle Bandbreite nutzen, da der Download nur bis maximal 2,2 mbps geht, obwohl ich 16 mbps habe, wenn ich in Browser einen Speedtest mach.
Darum:
Wie kann ich es machen, dass jeder Thread die maximale Leistung zugeordnet bekommt?
Ich hab schon nachgedacht, das Programm mehrfach zu öffnen und sie untereinander über Streams kommunizieren könnten...
Ich verwende C# unter Windows 10.
Gruß
Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 326309
Url: https://administrator.de/contentid/326309
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
13 Kommentare
Neuester Kommentar
Mehr Threads bedeuten nicht unbedingt mehr Leistung. Wir hatten das mal bei einem internen Netzwerkscanner getestet .. von 1-8 Threads hat konnte man einen Performanceschub feststellen, alles was darüber ging wurde wieder insgesamt gesehen langsamer. Hängt natürlich auch von der Hardware an, wie die Threads auf die CPU/Kerne verteilt werden.
Zitat von @Aicher1998:
Zudem kommt es mir so vor, als kann mein Programme nicht die volle Bandbreite nutzen, da der Download nur bis maximal 2,2 mbps geht, obwohl ich 16 mbps habe, wenn ich in Browser einen Speedtest mach.
Speedtest im Browser X-) das ist wohl ein Witz ?!Zudem kommt es mir so vor, als kann mein Programme nicht die volle Bandbreite nutzen, da der Download nur bis maximal 2,2 mbps geht, obwohl ich 16 mbps habe, wenn ich in Browser einen Speedtest mach.
Je nachdem was für Daten (große Dateien, viele kleine Dateien) geladen werden kann es hier auch zu unterschiedlichen Werten kommen.
Darum:
Wie kann ich es machen, dass jeder Thread die maximale Leistung zugeordnet bekommt?
Was verstehst du in dem Zusammenhang unter "Leistung"?Wie kann ich es machen, dass jeder Thread die maximale Leistung zugeordnet bekommt?
Ich hab schon nachgedacht, das Programm mehrfach zu öffnen und sie untereinander über Streams kommunizieren könnten...
Primäre Frage, wo ist dein Code bzw. wie legst du die Threads genau an, bzw. wie arbeitest du mit AsyncTasks oder Threadpools, Parallel.Foreach, etc.?Sicher das du die Ports auch wieder vernünftig schließt denn SRC Ports bleiben eine bestimmte Zeit lang offen und sind nur in begrenzter Anzahl verfügbar, sofern man sie nicht in der Registry hochschraubt.
Gruß mik
Jepp TCP ACKn.
Bei 200 gleichzeitg laufenden Threads ist klar das nicht alle gleichzeitig an die Reihe kommen können.
Wenns dir ums Last testen deiner Webseite geht
https://loadimpact.com/
http://httpd.apache.org/docs/2.2/programs/ab.html
http://www8.hp.com/us/en/software-solutions/loadrunner-load-testing/ind ...
Mir ist bewusst, dass das eine hohe Latenz hat, wenn viele kleine Dateien übertragen werden.
OK.Weil 1 Programm mit 2 Thread nicht die selbe Leistung hat, wie 2 Programme mit je 1 Thread.
Wie kann ich jedem Thread maximale Ressourcen zuordnen?
Nutze einen ThreadPool mit max. so vielen Threads geichzeitig wie du logische Prozessoren hast.Wie kann ich jedem Thread maximale Ressourcen zuordnen?
Ich dachte mir bereits ein List<Action> zu verwenden und das dann mit Parallel.Foreach durchlaufen zu lassen, hab mich aber erst mal für einfache Threads entschieden. Was denkst du, wäre besser?
Async Threadpool so das max. x Prozesse gleichzeitig laufen.Bei 200 gleichzeitg laufenden Threads ist klar das nicht alle gleichzeitig an die Reihe kommen können.
Wenns dir ums Last testen deiner Webseite geht
https://loadimpact.com/
http://httpd.apache.org/docs/2.2/programs/ab.html
http://www8.hp.com/us/en/software-solutions/loadrunner-load-testing/ind ...