web-dev-qa-db-fra.com

Blocking IO vs IO non bloquant; recherche de bons articles

Il était une fois je suis tombé sur Introduction to Indy article et je ne peux pas m'arrêter de penser au blocage vs non-blocage IO depuis lors.

Vous cherchez de bons articles décrivant les avantages et les inconvénients du blocage IO et non bloquant IO et comment concevoir votre application dans chaque cas pour obtenir un code naturel, facile à comprendre et à entretenir.
Je voudrais comprendre une GRANDE image ...

47
Piotr Dobrogost

Bien bloquer IO signifie qu'un thread donné ne peut rien faire de plus tant que IO n'est pas complètement reçu (dans le cas des sockets, cette attente peut être longue)) .

Non bloquant IO signifie qu'une demande IO est immédiatement mise en file d'attente et la fonction revient. La réelle IO est ensuite traitée) à un moment ultérieur par le noyau.

Pour bloquer IO vous devez accepter que vous allez attendre chaque IO requête ou vous devrez déclencher un thread par requête ( Ce qui deviendra très compliqué très rapidement).

Pour le non-blocage IO vous pouvez envoyer plusieurs demandes mais vous devez garder à l'esprit que les données ne seront pas disponibles avant un certain point "ultérieur". Cette vérification que les données sont réellement arrivées est probablement la partie la plus compliquée.

Dans 99% des applications, vous n'aurez pas besoin de vous soucier que votre IO bloque. Parfois, cependant, vous avez besoin des performances supplémentaires de vous permettre d'initier une IO requête et puis faites autre chose avant de revenir et, espérons-le, trouvez que la demande IO est terminée.

Quoi qu'il en soit, juste ma tuppence.

Edit : Pour savoir comment concevoir une application pour gérer le blocage IO tout en ayant de bonnes performances, coroutines pourrait être un bon ajustement.

61
Goz

Les points positifs et négatifs sont assez clairs:

Blocage - Programmation linéaire, plus facile à coder, moins de contrôle.
Non bloquant - Programmation parallèle, plus difficile à coder, plus de contrôle.

23
Spencer Ruport