Un IO di blocco buono significa che un determinato thread non può fare altro finché l'IO non viene ricevuto completamente (nel caso di socket questa attesa potrebbe essere lunga).
IO non bloccante significa che una richiesta di I/O viene accodata immediatamente e la funzione ritorna. L'IO effettivo viene quindi elaborato in un secondo puntatore dal kernel.
Per bloccare l'I/O è necessario accettare che si sta per attendere ogni richiesta di I/O si dovrà sparare un thread per richiesta (che si complicherà molto rapidamente).
Per l'IO non bloccante è possibile inviare più richieste, ma è necessario tenere presente che i dati non saranno disponibili fino a qualche punto "successivo". Questo controllo del fatto che i dati siano effettivamente arrivati è probabilmente la parte più complicata.
Nel 99% delle applicazioni non è necessario preoccuparsi del blocco dell'IO. A volte però hai bisogno di prestazioni extra per permetterti di iniziare una richiesta di I/O e poi fare qualcos'altro prima di tornare e, si spera, trovando che la richiesta di IO è stata completata.
In ogni caso, solo il mio punto.
Le applicazioni di modulo occupano quasi il 100% del tempo se blocchi di I/O. Gli utenti non amano le GUI che si bloccano. –
Niente ti impedisce di eseguire un thread separato che esegue tutte le operazioni di I/O in serie e bloccando ... – Goz