L'IO de blocage de puits signifie qu'un thread donné ne peut rien faire de plus tant que l'IO n'est pas entièrement reçu (dans le cas des sockets, cette attente peut être longue).
E/S non bloquantes signifie qu'une requête E/S est immédiatement mise en file d'attente et la fonction retourne. L'E/S réel est ensuite traité à un pointeur ultérieur par le noyau. Pour bloquer les E/S, vous devez soit accepter que vous allez attendre chaque requête d'E/S, soit avoir besoin de déclencher un thread par requête (ce qui devient très compliqué très rapidement). Pour les E/S non bloquantes, vous pouvez envoyer plusieurs requêtes, mais vous devez garder à l'esprit que les données ne seront pas disponibles avant un certain point «plus tard». Cette vérification de l'arrivée des données est probablement la partie la plus compliquée.
Dans 99% des applications, vous n'avez pas besoin de vous soucier de vos blocs d'E/S. Parfois, cependant, vous avez besoin de la performance supplémentaire de vous permettre d'initier une demande d'E/S, puis de faire autre chose avant de revenir et, espérons-le, de trouver que la requête d'E/S est terminée.
Quoi qu'il en soit, juste mon tuppence.
Les applications de formulaires se soucient à peu près 100% du temps si les blocs d'E/S sont bloqués. Les utilisateurs n'aiment pas les interfaces graphiques qui se bloquent. –
Rien ne vous empêche d'exécuter un thread séparé qui effectue toutes les E/S en série et en bloquant ... – Goz