2015-11-09 2 views
1

J'ai souvent entendu parler de asynchronous I/O, ce qui n'est pas bloquant s'il n'y a rien à E/S.Pourquoi le blocage des E/S est-il en cours?

Ma question est, quand nous faisons une blocking operation, je ne vois aucune logique dans mon code qui bloquent l'exécution. Alors, qui cause le blocage? Le système d'exploitation?

Donc, si nous voulons non-blocking operation, pouvons-nous devons attente pour le système d'exploitation pour fournir le soutien? Ou pouvons-nous implémenter une version non-blocking sur la version blocking?

+1

"J'ai souvent entendu parler d'E/S asynchrones, qui ne sont pas bloquantes s'il n'y a rien à E/S": cette instruction est très confuse. Il y a trois choses différentes: les E/S bloquantes, les E/S non bloquantes et les E/S asynchrones. Seul le premier de ces blocs. – EJP

+0

@EJP Pour être honnête, je ne suis pas tout à fait sûr de la distinction entre non-bloquant et asynchrone. Merci de l'avoir soulevé. Je suis sûr que les E/S asynchrones sont non bloquantes. Y a-t-il des E/S non bloquantes qui ne sont pas asynchrones? – smwikipedia

Répondre

1

Chaque code dans le même processus (thread) bloque comme d'habitude. Après avoir terminé un code, faites la ligne suivante. Vous n'avez pas besoin de déclarer le type blocking.

D'autre part, si vous voulez non-blocking du code. Vous devez exécuter dans un autre processus (thread) pour le faire.

+0

Je sens un peu de philosophie ... – smwikipedia

+0

Le codage est une sorte d'art, n'est-ce pas? – Jintin

+0

Est-ce une réponse acceptable pour vous? – Jintin