¿Cómo explicarías a un simple mortal sobre bloquear IO y IO sin bloqueo? He descubierto que estos conceptos no son muy claros entre muchos de nosotros los programadores.¿Qué hay en palabras simples bloqueando IO y IO sin bloqueo?
Respuesta
Bloquear las E/S significa que la ejecución del programa se pone en espera mientras se está realizando la E/S. Entonces el programa espera hasta que la E/S haya terminado y luego continúa su ejecución. En E/S sin bloqueo, el programa puede continuar durante las operaciones de E/S.
se limitó a decir .. el no bloqueo de E/S (asíncrono) permite otras operaciones que deben llevarse a cabo mientras se hace su cosa y el bloqueo de E/S bloquearían otras operaciones
Es un problema de concurrencia. En el caso normal, después de que un núcleo del sistema operativo recibe una operación de E/S de un programa de usuario, ese programa no se ejecuta nuevamente hasta que la operación de E/S finaliza. Otros programas generalmente se programan mientras tanto.
Esto resuelve muchos pequeños problemas. Por ejemplo, ¿cómo sabe un programa cuántos bytes se leyeron a menos que se complete la E/S cuando devuelve el read(2)
? ¿Cómo sabe si puede reutilizar un buffer write(2)
si la operación todavía está en progreso cuando regresa write(2)
? Obviamente, se necesita una interfaz más compleja para las E/S verdaderamente asíncronas.
al final todo se reduce a:
- E/S pasa de forma sincrónica con respecto al programa, mediante el bloqueo del programa hasta E/S está terminada
- E/S sólo se ha programado mediante una llamada al sistema , y existe algún mecanismo de notificación para comunicar el resultado real
- Existe un compromiso donde las operaciones de E/S simplemente fallan si no se pueden completar inmediatamente. Este es el uso más común de E/S "sin bloqueo" en la práctica.
Todo el asunto se complica, además, por el esfuerzo de programar programas multihilo cuando I/O posiblemente podría bloquear sólo un hilo, pero eso es una cuestión diferente ...
- 1. Bloqueo de IO en Akka
- 2. sin bloqueo-io vs bloqueo-io el rendimiento de los datos en bruto
- 3. ¿Cómo se implementa IO sin bloqueo?
- 4. scala actors vs hilos y bloqueo IO
- 5. Bloqueo de IO frente a IO no bloqueante; en busca de buenos artículos
- 6. ¿Cómo escribir en un archivo usando IO sin bloqueo?
- 7. C fork/exec con tubería sin bloqueo IO
- 8. Bloqueo de IO/Ruby on Rails
- 9. Haskell mónada: IO [doble] a [IO Doble]
- 10. EUnit y io: formato
- 11. diferencia entre IO-APIC-fasteoi y IO-APIC-edge
- 12. ¿cuál es la diferencia entre la memoria asignada io y io io mapeado
- 13. IO asincrónico en Java?
- 14. Ruby file IO delimitadores?
- 15. ¿Hay alguna aplicación escrita en el lenguaje de programación Io? (O, distribuyendo aplicaciones Io.)
- 16. recursiva IO en Haskell
- 17. ¿Qué módulo de subprocesamiento debo usar para evitar que el disco IO bloquee la red IO?
- 18. Bloqueo de eventos frente a bloqueos múltiples IO
- 19. idiomático IO con Scala
- 20. Archivo asíncrono IO en .Net
- 21. multiplataforma (Linux/Win32) sin bloqueo C++ IO en stdin/stdout/stderr
- 22. Haskell IO Testing
- 23. ¿Cuál es la diferencia entre las dependencias de maven org.apache.commons: commons-io y commons-io: commons-io?
- 24. Mostrar para IO tipos
- 25. Optimizar archivo C# IO
- 26. Android ContentProvider y Google IO Resto Talk
- 27. Observable Red IO Parsing
- 28. subproceso.Popen() IO redirect
- 29. Haskell Extensible IO Exceptions?
- 30. Haskell recursión con números aleatorios y IO
... y es el notificado por medio de una devolución de llamada cuando finaliza la operación IO. Esto te obliga a diseñar tus programas de manera diferente, pero los hará funcionar mucho mejor. –
@ Lex, ¿algún ejemplo de operación de bloqueo y no bloqueo? Gracias. – Kalanidhi
@etc_passwd En JS es simple de entender; una llamada a 'alert();' está bloqueando, ya que la ejecución queda en espera hasta que el usuario haga clic en Aceptar. Una llamada AJAX no es de bloqueo, la ejecución de se continúa mientras se envía la solicitud HTTP. –