Multi-Threaded Server vs. Single-Threaded-Server Modell

Alles rund um die Programmierung mit Qt
Antworten
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Multi-Threaded Server vs. Single-Threaded-Server Modell

Beitrag von nando »

Hi Leute,
was meint ihr denn, wann wuerdet ihr euch fuer ein multi-threaded-server modell entscheiden und wann fuer single-threaded ?

gibt es eine moeglichkeit mit QT zu garantieren dass eine client verbindung nicht haengt und somit der ganze server steht ?
wie sieht es mit QSocketNotifier aus ?

interessant waere auch der gesichtspunkt der skalierung...

wir sind hier gerade rege am diskutieren :)

gruss,
nando
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die kompletten TCP/IP Verbindungen in Qt sind & können ohne Probleme non-blocking (also mit Threads bzw. mit Notifiern) implementiert werden. Also sehe ich da keine Probleme
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Single-Threaded ist auf jeden Fall mal auf einen Prozessor begrenzt. So viel zum Thema skalierung. Wie wärs mit einer Mischung aus beiden? Ich glaub ich hab schon was gesehen, daß man mit Qt abfragen kann wieviele Threads gleichzeit Sinn machen. Das wäre schon mal ein Ansatz für eine max. Anzahl an Threads...
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag von nando »

wie ist das denn standardmaessig.... QTcpSocket scheint ja non-blocking zu sein, oder wie funktioniert das sonst QT intern?
Kann mir nicht vorstellen, dass jedes Socket Objekt intern ein select macht....

die frage is nur, was passiert, wenn ich z.b beim senden an einen client das kabel ziehe.... haengt dann der ganze server? oder ist das write non blocking und die daten werden vom kernel gepuffert...?

wie kann ich mich bei einer single-threaded loesung gegen haengen des ganzen servers schuetzen ? (also durch externe einfluesse) ...

hab das ganze mal ohne threads gemacht und bis jetzt funktioniert es... werde aber mal paar nette tests durchfuehren....
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich rede jetzt einfach mal von Windows - da Qt plattformunabhängig ist, ist es unter Linux wohl so ähnlich.

Die Socket-Funktionen sind alle non-blocking. D.h. ich sende die Daten, Windows puffert sie mehr oder weniger zwischen und Du kannst sofort weiterarbeiten. Sind die Daten komplett versandt gibt es ein Windows-Event und Du bekommst das Qt-Signal QIODevice::bytesWritten().
Falls ein Senden nicht möglich ist wird dies auch über Events und/oder Signals angezeigt. Also alles komplett non-blocking.

Damit hätte sich wohl auch der Rest deiner Fragen beantwortet, denke ich.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten