Hoi,
Ohne das jetzt in einen Flamewar ausarten zu lassen:
Was ist bei einer Diskussion ein Flamewar?
Warum denn Threads.
Sie sind intuitiv, einfach zu handhaben und erfuellen ihren Zweck sehr
gut.
Ich verwende seit längerem IO::Select und es erfüllt
(gerade für sehr kurze Verbindungszeiten wie bei POP-Servern
(wo für jedes zweite Kommando doch neu angemeldet wird))
seinen Zweck sehr gut.
Ansichtssache. Erstens koennen die Verbindungszeiten auch sehr lang
werden (grosse EMails) und zweitens sind sie eine zu grosse
Fehlerquelle. Man muss mit dem Puffer aufpassen, kann nicht direkt
in die Sockets schreiben, usw. Die Haupt-Schleife kann, wenn man
nicht aufpasst, auf einmal zu einem busy wait werden oder zum
Gegenteil: die Hauptschleife kann zu lange fuer einen Durchlauf
brauchen. All solche Sachen muss man beachten.
Was ist beim Gebrauch von IO::Select denn das schlechte Design?
Ich habe nicht gesagt, dass der Gebrauch von IO::Select automatisch
schlechtes Software-Design bedeutet, sondern ich sagte, dass es
nicht gut geeignet sei dafuer -- diese Methode ist IMHO wenig
intuitiv und kompliziert. Nicht umsonst geht der Apache von dieser
Methode weiter weg.
Aber du hast schon so halb recht. Um einen optimalen Server zu
schreiben, sollte man beides kombinieren: ein Thread handelt mehrere
Requests ab. Die Haupt-Schleife darf einfach nicht zu sehr
ausgelastet sein, gerade bei sehr vielen Verbindungen ist
multiplexing i/o nicht gut geeignet (zu lange Schleifendurchlaeufe,
die response time wird zu gross). Deshalb ist eine Mischung aus
beidem IMHO die wirklich optimale Loesung -- zumindest von der
Performance her gesehen. Ueber das Konzept laesst sich streiten,
das ist Geschmacksache.
Gruesse,
CK