Non-Threaded Server?

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hallo zusammen,

die klassiche vorgehensweise bei Serverprogrammen ist ja, jeden Client der sich andockt, in einen eigenen thread zu stecken.

Dies wäre dann ein Threaded-Server....

Aber es gibt auch "Non-Threaded-Server"...
Laut diversen Quellen im Netz sind die zwar "etwas" langsamer, aber man muss sich weniger bzw keine Gedanken bzgl der Synchronisation machen. Auch wäre es hier einfacher eine "Momentaufnahme" des Systems zu machen. Fehleranayse müsste so um ein vielfaches einfacher sein...

Trotz dass diese Technik etwas langsamer zu sein schein kann sie sooo schlecht nicht sein. Schließlich arbeitet unter anderen der Apache-Webserver nach diesem Model (wenn man nicht zufällig ein anderes MPM-Modul benutzt).

Jetzt hat sich mir die Frage gestellt:
Wie sieht so ein non-threaded Server denn aus ?
Clientanfragen müssen ja irgendwie in eine Reihe gestellt und nacheinander abgearbeitet werden. So stell ich mir das zumindest vor.
Aber wie macht man sowas am geschicktesten?

Ich hab google gefragt, in diversen Dev-Seiten geblättert und bin nicht fündig geworden... Überal steht nur dass es sowas gibt, aber ein Beispiel oder eine tiefergehende Erklärung hab ich nicht gefunden.

Kennt jemand ne Seite auf der sowas prinzipiell erklärt ist? Codebeispiele (auch im Pseudocode) wären auch sehr interessant.

Einen konkreten verwendungszweck für einen non-threading-server hab ich zwar noch nicht, aber vielleicht verwend ich das dann ja im nächsten Client-Server-Programm :)

Gruß
Alex
 
G

Guest

Gast
Multithreaded

1 Warten auf Anforderung
2 Annehmen der Anforderung
3 Fork (Weitere Kommunikation läuft im getrennten Thread/Prozess)
4 Zurück zu 1
Code:
for(;;)
{
  Socket client = serverSocket.accept();
  // weitere Verarbeitung im getrennten Thread, im ConnectionHandler
  MyThreadPool.enqueue(ConnectionHandler.createInstance(client));
  ...
}
Singlethreaded

1 Warten auf Anforderung
2 Annehmen der Anforderung
3 Kommunikation läuft im gleichen Thread
4 Zurück zu 1 oder "Der Nächste bitte"
Code:
for(;;)
{
  Socket client = serverSocket.accept();
  // weitere Verarbeitung hieher.
  // Es wird keine Verbindung akzeptiert, solange 
  // die aktuelle Verarbeitung nicht abgeschlossen ist
  ...
}
Bei einer durchschnittlichen Antwortzeit von sagen wir mal 50ms, würde der
zwanzigste bereits über eine Sekunde lang warten, bis er eine Antwort kriegt.
Durch Multithreading wird dies, im Rahmen der verfügbaren Übertragungskapazität,
umgangen und die verfügbaren Ressourcen wie CPU, RAM etc. werden besser
ausgelastet.

Das mit dem "vielleicht verwend ich das dann ja im nächsten Client-Server-Programm"
kannst du gleich vergessen. Es wird grauenhaft langsam.
 
G

Guest

Gast
Hmm, wenn man so sieht leuchtets ein.

Aber warum arbeitet dann Apache mit so Zeugs? Okay, man könnte jetzt sagen dass da nicht so viele Anfragen eingehen. Aber das MPM Modul kann auch mit sehr großen anfragen noch gut umgehen und gute Antwortzeiten liefern ...

Von nem bekannten der mal bei Ericson in der Entwicklung gearbeitet hat weiß ich dass dort die ganz großen digitalen Telefonanlagen auch nach dem Prinzip arbeiten. Ein Grund den er mir nennen konnte war: Bei so großen Systemen ist einfach nichtmehr machbar Fehleranalysen zu machen da man bei Thread nicht so gut/keinen Moment-Snapshot machen kann.

Gruß
Alex
 
G

Guest

Gast
Dass der Apache singlethreaded arbeitet , glaube ich eher nicht. Es sei dann es ist
die reine "Anfrageannahme" gemeint (wie in den Beispielen oben; die accept-Schleife).
Wenn ich mir die Beispiele in JavaMagazin anschaue, dann fällt mir auf, dass dort die
Anfrageverarbeitung, also die eigentliche "Bussinesslogik", in den Beispielen
singlethreaded läuft (doSomeWork(); und handleClientRequest(clientSocket))

In meinem Beispiel habe ich unterstellt, dass es einen Threadpool gibt, der die
eigentliche Verarbeitung der Anfrage übernimmt bzw. die ConnectionHandler
auf die verfügbaren Threads verteilt (Stichwort: Thread scheduling). Ist die Anfrage
abgearbeitet, wird das Thread freigegeben bzw. wieder im ThradPool als 'verfügbar'
markiert und kann wieder verwendet werden.

Dieses Thema wird ziemlich ausführlich in "Java Threads, Third Edition" behandelt.
 
T

tuxedo

Gast
Zum Apache:

Dieses Multi-Processing-Modul (MPM) implementiert einen im Voraus forkenden Webserver ohne Thread-Unterstützung, der Anfragen auf ähnliche Weise behandelt wie der Apache 1.3. Es ist für Angebote geeignet, die aus Kompatibilitätsgründen mit nicht-Thread-sicheren Bibliotheken Threading vermeiden müssen. Es ist außerdem das geeignetste MPM, um jede Anfrage isoliert zu bearbeiten, so dass Probleme mit einem einzelnen Prozess keinen anderen beeinflussen.

Ich werd mir das Thema mal zu gemüte führen ...

- Alex
 
G

Guest

Gast
alex0801 hat gesagt.:
Zum Apache:

Dieses Multi-Processing-Modul (MPM) implementiert einen im Voraus forkenden Webserver ohne Thread-Unterstützung, der Anfragen auf ähnliche Weise behandelt wie der Apache 1.3. Es ist für Angebote geeignet, die aus Kompatibilitätsgründen mit nicht-Thread-sicheren Bibliotheken Threading vermeiden müssen. Es ist außerdem das geeignetste MPM, um jede Anfrage isoliert zu bearbeiten, so dass Probleme mit einem einzelnen Prozess keinen anderen beeinflussen.

Ich werd mir das Thema mal zu gemüte führen ...

- Alex
OK, fork muss in Java erst erfunden werden. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Server Threaded machen. Port-Problem Frage Allgemeine Java-Themen 2
T Java Logging API in Multi Threaded API Allgemeine Java-Themen 2
L remote debugging of a multi threaded system Allgemeine Java-Themen 2
D Datei Suche: Multi Threaded Allgemeine Java-Themen 8
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
E Server Client Audio Allgemeine Java-Themen 6
E Server Client Audio Allgemeine Java-Themen 0
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
D Live-Scripting im Server Allgemeine Java-Themen 6
Monokuma Threadproblem mit Sockets und Server Allgemeine Java-Themen 7
T imagej-server NullPointerException Allgemeine Java-Themen 1
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
C Java RMI Client - Server Allgemeine Java-Themen 0
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
M TomEE auf Windows Server 2016 installieren Allgemeine Java-Themen 4
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
J Java - hoher Ramverbraucht auf WTS Server Allgemeine Java-Themen 8
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
S Simples Client Server Setup in Java Allgemeine Java-Themen 4
K Server mieten, Berechnungen darauf ausführen Allgemeine Java-Themen 14
Anfänger2011 Java Server oder lieber was anderes Allgemeine Java-Themen 16
F Best Practice Server und Clients Allgemeine Java-Themen 10
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
D Best Practice Java Application Server , Docker oder was? Allgemeine Java-Themen 15
L Suche nach CalDav Server API Allgemeine Java-Themen 0
C Hang Man Server Client Allgemeine Java-Themen 3
C Hang man mit Server/Client Allgemeine Java-Themen 2
K Classpath JDBC Driver auf Server Allgemeine Java-Themen 4
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
I Installer, der JAVA EE Server und DB installiert Allgemeine Java-Themen 10
M Kapselung JasperReports Server und Java Allgemeine Java-Themen 5
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
C Mit Pc Awendungen auf Server starten Allgemeine Java-Themen 8
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
T Java Streaming-Server & Streaming-Client Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
D Client / Server Allgemeine Java-Themen 23
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
U AWT simulierter Tastendruck auf Virtual Server Allgemeine Java-Themen 7
Z Socket [Chatprogramm] Nachrichten vom Server anzeigen lassen Allgemeine Java-Themen 6
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
N COM Server ansteuern / KISSsoft Allgemeine Java-Themen 3
N URLConnection - Server abgeschaltet Allgemeine Java-Themen 2
A Parser verursacht Speicherprobleme auf Server Allgemeine Java-Themen 2
T Mit Java auf Dateien zugreifen die auf einem Server liegen Allgemeine Java-Themen 5
J Problem beim Auslesen einer Datei vom Server Allgemeine Java-Themen 4
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J Application Server Allgemeine Java-Themen 2
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
C game-server GUI erstellen Allgemeine Java-Themen 13
Developer_X Java FTP - Ordner auf Server erstellen Allgemeine Java-Themen 7
C Java Server Pages Problem Allgemeine Java-Themen 6
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
M Server-Responds testen, Code-Redundanz Allgemeine Java-Themen 3
T JPA Entity im Client-Server-Umfeld Allgemeine Java-Themen 19
C Primzahlen Server Allgemeine Java-Themen 3
K Server Daten Visualisieren Allgemeine Java-Themen 3
S FTP Gezippte Datei von FTP Server downloaden Allgemeine Java-Themen 24
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
B verbindung mit exchange server Allgemeine Java-Themen 3
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
D Versuch Server - Client anwendung Allgemeine Java-Themen 9
M Frage zum Auslesen einer Datei auf nem Server Allgemeine Java-Themen 4
ruutaiokwu MS Exchange Server 2003 Daten auslesen Allgemeine Java-Themen 2
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
Final_Striker Datei vom Server bekommen Allgemeine Java-Themen 2
W programm auf server Allgemeine Java-Themen 5
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
MQue Server- Thread Client Allgemeine Java-Themen 2
N Daten auf Server kopieren Allgemeine Java-Themen 6
S Datei auf Server mit lokaler Datei vergleichen Allgemeine Java-Themen 4
J J2EE Server für EJB Container Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
I Persistenz ohne App-Server? Allgemeine Java-Themen 6
O binärer Suchbaum mit client server., objekte speichern. Allgemeine Java-Themen 2
0 kein Java unter Server 2008 ? Allgemeine Java-Themen 3
G Proxy- Server setzen Allgemeine Java-Themen 2
G Preise am Server verändern Allgemeine Java-Themen 4
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
J Java zugriff auf Exchange Server Allgemeine Java-Themen 10
MQue FTP Server/ Datei ablegen Allgemeine Java-Themen 4
F Java Server VM/ Client VM Allgemeine Java-Themen 7
J java + rmi + not found in gnu.java.rmi.server Allgemeine Java-Themen 7
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
A Client/Server-Anwendung Allgemeine Java-Themen 3
P Server für Java- Programme Allgemeine Java-Themen 8
S SERVER.XML Allgemeine Java-Themen 3
G Gelöst: ZIP File vom FTP Server entpacken Allgemeine Java-Themen 3
T Proxys: Idee für den Callback vom Server zum Client? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben