L
Lupo
Gast
Hallo!
Ich beschäftige mich gerade mit Java und will mir eine kleine Applikation für Lasttests basteln. Auf deutsch: ich will einen DB-Server mal zum Schwitzen bringen und die Antwortzeiten mitstoppen.
Vom Prinzip her dachte ich mir das so in etwa:
Da ich die Abfragen natürlich nicht nacheinander abschicken will (also den Code einfach mit einer Schleife x-mal wiederholen), sondern (möglichst) gleichzeitig (was ja auch eher dem "richtigen Leben" entspricht, habe ich mir überlegt, dass hierfür wohl Threads die Lösung wären (für jeden "Last-Code-Block" einen eigenen Thread).
Wenn ich aber den obigen Code in einen Thread packe und dann mal ein paar Hundert Threads starte, kommt für jeden Codeblock die annähernd gleiche zeit raus (die übrigens auch in etwa der Gesamtlaufzeit entspricht).
Ich vermute mal das kommt daher, dass der Scheduler ja immer nur einen Thread gleichzeitig ausführt und die anderen dabei schlafen legt - die Schlafenszeit wird also mitgestoppt - deshalb sind auch alle Threads und das Gesamtprogramm ungefähr gleichzeitig fertig.
Wo, jetzt glaube ich zwar zu wissen, was ich falsch mache, aber
1. liege ich da überhaupt richtig mit meiner Vermutung und
2. wie gehts denn richtig?
Fragen über Fragen...
Vielen Dank schonmal für Eure Antworten!
Lupo
Ich beschäftige mich gerade mit Java und will mir eine kleine Applikation für Lasttests basteln. Auf deutsch: ich will einen DB-Server mal zum Schwitzen bringen und die Antwortzeiten mitstoppen.
Vom Prinzip her dachte ich mir das so in etwa:
Code:
long start = System.currentTimeMillis();
// ...
// mach aufwändige Dinge, die den Server ins Schwitzen bringen
// ...
long dauer = System.currentTimeMillis() - start;
// das Ergebnis kann dann in z. B. in einer anderen DB abgespeichert werden...
Da ich die Abfragen natürlich nicht nacheinander abschicken will (also den Code einfach mit einer Schleife x-mal wiederholen), sondern (möglichst) gleichzeitig (was ja auch eher dem "richtigen Leben" entspricht, habe ich mir überlegt, dass hierfür wohl Threads die Lösung wären (für jeden "Last-Code-Block" einen eigenen Thread).
Wenn ich aber den obigen Code in einen Thread packe und dann mal ein paar Hundert Threads starte, kommt für jeden Codeblock die annähernd gleiche zeit raus (die übrigens auch in etwa der Gesamtlaufzeit entspricht).
Ich vermute mal das kommt daher, dass der Scheduler ja immer nur einen Thread gleichzeitig ausführt und die anderen dabei schlafen legt - die Schlafenszeit wird also mitgestoppt - deshalb sind auch alle Threads und das Gesamtprogramm ungefähr gleichzeitig fertig.
Wo, jetzt glaube ich zwar zu wissen, was ich falsch mache, aber
1. liege ich da überhaupt richtig mit meiner Vermutung und
2. wie gehts denn richtig?
Fragen über Fragen...
Vielen Dank schonmal für Eure Antworten!
Lupo