@zhavok sagte in Gleicher Code, unterschiedliches Ergebnis:
Ok vielen dank. Also ist mein Beispiel zwar multithreaded, aber synchron. Denn jeder Thread wartet immer beim read bis etwas ankommt und so lange ist der thread blocked.
Es ist definitiv multithreaded, definitiv blocking, und ich würde es als auch synchron bezeichnen.
Asynchronität lohnt sich also zum Beispiel beim streamen oder VoiceChats. Dort braucht man ja keine Rückmeldung und die Gegenstelle muss auch nicht auf die Informationen reagieren.
Asynchronität lohnt sich in vielen Fällen. z.B. wenn man extrem viele Verbindungen hat und/oder viele Verbindungen lange "idle" sind. Denn...
Ein Thread benötigt einiges an RAM, daher wenn man viele Verbindungen verschwendet man viel RAM.
Das Umschalten zwischen Threads kann etwas an Performance kosten.
Beides sind aber Punkte die man nicht überbewerten sollte. Tausend Verbindungen sind z.B. noch lange kein Grund vom "one thread per connection" Modell wegzugehen, vorausgesetzt man hat einen "normalen" PC zur Verfügung (paar GB bis zu GB RAM, 2-4 Cores mit je 2-4 GHz). Und die Einfachkeit dieses Ansatzes ist halt kaum zu überbieten, was seine grosse Stärke ist.
Synchronität wäre zum Beispiel sinnvoll für eine Telnet Verbindung. Wenn man zum Beispiel möchte, dass auf einem Rootserver etwas ausgeführt oder abgefragt wird.
Synchron, blocking und mit einem Thread pro Session wird man bei Telnet nicht weit kommen. Gibt ja zwei Richtungen. D.h. man braucht entweder zwei Threads pro Session oder halt irgendwas ala asynchronem IO oder non-blocking IO.
(Gut, auf POSIX Systemen könnte man vermutlich Signals verwenden, aber Signals sind so grausam, darüber will man eigentlich gar nicht nachdenken.)