Entwickler-Ecke
Basistechnologien - Verständnisfrage zu Threads - Einsatz bei Client/Server
Ares - Do 22.01.09 18:26
Titel: Verständnisfrage zu Threads - Einsatz bei Client/Server
Hallo!
Ich möchte gerade zum ersten Mal in einem Projekt Thread einsetzten und habe dabei noch ein Verständnisproblem. Bei meinem Projekt geht es um einen Server der Daten aus verschiedenen Quellen (z.B. Datenbanken) bereit hält, damit diese von beliebig vielen Clients abgefragt werden können.
Wie werden hier Threads am sinnvollsten eingesetzt um die "gleichzeitige" Abfrage aus mehreren Quellen zu ermöglichen?
Mein erster Denkansatz war folgender:
- Beim Start des Servers wird für jede Datenquelle ein entsprechendes Objekt erstellt. Für jedes Objekt wird hierbei ein eigener Thread erstellt. Nach der Initialisierung des Objektes läuft der Thread in einer Schleife weiter und wartet auf Abfragen des Objektes.
- Ein Client richtet eine Abfrage von Quelle1 an den Server. Diese wird vom Haupthread entgengenommen.
- Der Server leitet die Anfrage an den Thread von Quelle1 weiter. Dort werden die Daten für die Antwort zusammen gestellt.
- Der Server kann während dessen weiterarbeiten und z.B. andere Anfragen verarbeiten
- Der Thread von Quelle1 gibt die Antwort an den Server zurück der diese an den Client leitet.
Wäre das in der dieser Art machbar?
Kann ein Thread Anfragen/Daten/WasAuchImmer an einen anderen Thread weiterleiten? Ausgehend von dem was ich bis jetzt über das Thema gelesen habe denke ich nicht, dass das geht. Der Hauptthread kann also weder die Anfrage an den Thread von Quelle1 geben noch kann dieser mit Daten Antworten. Sehe ich das richtig?
Zweiter Ansatz
- Beim Start des Servers wird für jede Datenquelle ein entsprechendes Objekt erstellt. Für jedes Objekt wird hierbei ein eigener Thread erstellt. Nach der Initialisierung des Objektes ist der Thread beendet.
- Ein Client richtet eine Abfrage von Quelle1 an den Server. Diese wird vom Haupthread entgengenommen.
- Der Hauptthread erstellt einen neuen Thread in dem die Daten von von Quell1 abgefragt wird.
- Der Server kann während dessen weiterarbeiten und z.B. andere Anfragen verarbeiten
- Der Thread von Quell1 erstellt die Antwort und sendet diese an den Client.
Soweit ich das Thema Threads bis jetzt verstanden habe, sollte das Ganze mit diesem Ansatz funktionieren. Der Haupthread leitet keine Anfrage an einen existierenden Thread sondern erstellt für jede Anfrage einen neuen Thread. Der Thread von Quelle1 gibt die Antwort nicht an den Haupthread zurück sondern sendet die Daten selbst an den Client.
Würde das so funktionieren?
Wenn ja: Ist die Lösung wirklich sinnvoll und sauber? Gibt es ggf. noch bessere Ansätze?
Wenn nein: Wie löst man dieses Problem dann am Besten? Das Ganze lässt sich ja 1 zu 1 mit einem Webserver vergleichen. Es sollte also eigentlich in jedem Fall eine gute Lösung dafür geben :-)
Herzlichen Dank für Eure Tipps und Meinungen hierzu!
Ares
Kha - Do 22.01.09 20:21
Nr. 2 ist die übliche Methode. Solange die Quellen threadsafe sind (dafür sind DBs da), spricht nichts dagegen, jedem Request einen eigenen Thread zu gönnen. Wobei du die Initialisier-Threads wahrscheinlich nicht brauchst (bei DBs gibts sowieso wenig zu intialisieren), soo oft wirst du den Server ja hoffentlich nicht neustarten müssen ;) .
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!