Hi!
Ich bin mir nicht ganz sicher, ob das Thema hier rein gehört. Falls nicht, bitte verschieben!
Ich versuche, mich kurz zu fassen! Ich programmiere einen Webserver in Java. Der Server ist bereits lauffähig, Threadbasierend, realisiert mit ServerSocket.
Initialisierung eines Threads im Hauptprozess:
Server_instance arbeitet dann die jeweilige Anfrage ab.
Ich habe heute einen Belastungstest durchgeführt: eine Seite mit ca. 80 Bildern parallel von 4 Rechner aus abgefragt. Da mein Server nur ein 400er Pentium mit 128 MB ist, auf dem zusätzlich noch FTP-Server etc. laufen, möchte ich gern, dass der Webserver nur eine bestimmte Anzahl an Anfragen gleichzeitig bearbeitet. Dabei geht es mir um die Beschränkung der gleichzeitigen Festplattenzugriffe.
Habe es in der run()-Methode der Server_instance wie folgt versucht:
Somit wird der Webserver auf maximal 8 Threads gleichzeitig beschränkt. Das funktioniert auch, allerdings nicht mehr! Sind einmal 8 Threads aktiv, so legen diese sich alle immer und immer wieder schlafen. Was natürlich nicht Sinn der Sache ist, da ja nur bei einer Auslastung von 8 Threads keine neuen gestartet werden sollen. So funktioniert es jedenfalls nicht.
Gibt es andere Lösungsvorschläge?
Kann man die Threadanzahl eines Java-Programms irgendwie festlegen? Im Voraus?
Bin für jede Idee zu haben
Ich bin mir nicht ganz sicher, ob das Thema hier rein gehört. Falls nicht, bitte verschieben!
Ich versuche, mich kurz zu fassen! Ich programmiere einen Webserver in Java. Der Server ist bereits lauffähig, Threadbasierend, realisiert mit ServerSocket.
Initialisierung eines Threads im Hauptprozess:
Code:
public class Server implements Runnable {
[...]
public void run() {
try {
while (true) {
Socket client = serverSocket.accept();
new Server_instance(client).start();
}
} catch (Exception e) { e.printStackTrace(); }
} // run
[...]
}
Server_instance arbeitet dann die jeweilige Anfrage ab.
Ich habe heute einen Belastungstest durchgeführt: eine Seite mit ca. 80 Bildern parallel von 4 Rechner aus abgefragt. Da mein Server nur ein 400er Pentium mit 128 MB ist, auf dem zusätzlich noch FTP-Server etc. laufen, möchte ich gern, dass der Webserver nur eine bestimmte Anzahl an Anfragen gleichzeitig bearbeitet. Dabei geht es mir um die Beschränkung der gleichzeitigen Festplattenzugriffe.
Habe es in der run()-Methode der Server_instance wie folgt versucht:
Code:
class Server_instance extends Thread {
public void run() {
/* solange warten, bis <9 Threads laufend
while (this.activeCount()>8) {
try { Thread.sleep(500); }
catch ( InterruptedException ie) { }
}*/
[...]
[...]
}
Somit wird der Webserver auf maximal 8 Threads gleichzeitig beschränkt. Das funktioniert auch, allerdings nicht mehr! Sind einmal 8 Threads aktiv, so legen diese sich alle immer und immer wieder schlafen. Was natürlich nicht Sinn der Sache ist, da ja nur bei einer Auslastung von 8 Threads keine neuen gestartet werden sollen. So funktioniert es jedenfalls nicht.
Gibt es andere Lösungsvorschläge?
Kann man die Threadanzahl eines Java-Programms irgendwie festlegen? Im Voraus?
Bin für jede Idee zu haben