Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Threads vs Polling

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.10.2007, 20:35 Uhr
mike
Pinguinhüpfer
(Operator)


Hallo

Ich beschäftige mich grade mit Threads (pthread, ...) vs. Polling (epoll, kqeue, ...)
Ich hab gelesen, dass beide ihre Anwendungsgebiete haben und dort auch ihre Stärken.

Aber wann verwendet man welche? Würde z.B. ein FTP Server mit polling Sinn machen?

Danke im Voraus
mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.10.2007, 22:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja anschaulich gesehen: Umschalten zwischen Prozessen oder auch Threads kostet dich natürlich im SingleCPU-Fall wahrscheinlich mehr syscalls und umschaltzeit als Polling. Im Mehr-CPU-Fall jedoch dürften Threads reichlich performanter sein und außerdem wahrscheinlich auch skalierbarer. Polling benutzt dann halt nur eine CPU, Threads können dann Echt-Parallel auf mehreren ausgeführt werden.

Ein kleiner FTP-Server (so bis zu 10 User) mit Polling könntesicherlich hinhauen, ein großer (mit paar hundert leuten) würde da wahrscheinlich eine miserable performance liefern.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.10.2007, 21:41 Uhr
ao

(Operator)


Polling und Threads sind (ähnlich wie Rot und Kalt) keine Gegensätze. Gegensätze wären Polling und Interrupt-Betrieb, oder Event-Betrieb, oder wie man das im jeweiligen Betriebssystem nennt. Der andere Gegensatz wäre Single-Loop (Prinzip der großen Schleife) und Multithreading.

Du meinst hier vermutlich einen Multithread-FTP-Server (der für jede Client-Connection einen Thread aufmacht) gegenüber einem Singlethread-Server, der alle Connections in einer Schleife bedient.

Ich würde sowas nie single-threaded bauen (*), weil man bei der Multithread-Variante eine ganz einfache 1:1-Zuordnung von Client, Connection-Objekt, Thread-Objekt, transferiertem File, lokalem Datenpuffer und so weiter hat. Das kann man wunderbar in eine Handvoll Klassen gießen und zur Laufzeit dynamisch managen, und ob der Server 5 oder 50 oder 500 Clients bedient, spielt softwaretechnisch überhaupt keine Rolle. Einmal sauber entworfen und ordentlich getestet - für alle Zeiten fertig.

(*) vorausgesetzt, es gibt ein Multithreading-System, das ich benutzen kann.

Ich glaube auch nicht, dass die Singlethread-Lösung performanter wäre. Mit einem einzigen eingeloggten Client hat auch die Multithread-Lösung nur einen Thread (abgesehen von der Hauptverwaltung, die irgendwo auf neu ankommende Clients wartet, aber die tut ja auch nichts), und der kann richtig Gas geben.

Kommt ein zweiter Client dazu, dann muss die MT-Lösung regelmäßig den Thread wechseln, das stimmt. Aber auch der Singlethread-Server muss sich für jeden Schleifendurchlauf erst irgendwo einen neuen Kontext (Connection, File usw.) abholen und am Ende wieder wegspeichern. Ist also nicht so, dass der nix zu verwalten hätte. Die Frage ist, wer das performanter hinkriegt, ein hoch optimiertes und von echten Könnern geschriebenes Betriebssystem oder deine Routinen (nix gegen dich).

ao

Dieser Post wurde am 23.10.2007 um 21:42 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: