Gut blockierende IO bedeutet, dass ein bestimmter Thread nichts mehr tun kann, bis der IO vollständig empfangen wurde (im Falle von Sockets könnte diese Wartezeit lange dauern).
Nicht blockierende IO bedeutet, dass eine IO-Anfrage sofort in die Warteschlange gestellt wird und die Funktion zurückkehrt. Die tatsächliche IO wird dann zu einem späteren Zeitpunkt vom Kernel verarbeitet.
Zum Blockieren von IO müssen Sie entweder akzeptieren, dass Sie auf jede IO-Anfrage warten, oder Sie müssen einen Thread pro Anfrage auslösen (was sehr schnell sehr kompliziert werden wird).
Für nicht blockierende E/A können Sie mehrere Anfragen senden, aber Sie müssen bedenken, dass die Daten erst zu einem späteren Zeitpunkt verfügbar sind. Diese Überprüfung, dass die Daten tatsächlich angekommen sind, ist wahrscheinlich der komplizierteste Teil.
In 99% der Anwendungen müssen Sie sich nicht darum kümmern, dass Ihre IO-Blöcke blockieren. Manchmal benötigen Sie jedoch die zusätzliche Leistung, dass Sie eine E/A-Anforderung initiieren und dann etwas anderes tun können, bevor Sie zurückkommen und hoffentlich feststellen, dass die E/A-Anforderung abgeschlossen wurde.
Wie auch immer, nur meine tuppence.
Formulare Anwendungen kümmern sich ziemlich 100% der Zeit, wenn IO-Blöcke. Benutzer mögen keine GUIs, die hängen. –
Nichts, was Sie daran hindert, einen separaten Thread auszuführen, der alle IO seriell ausführt und blockiert ... – Goz