2009-09-26 13 views

Respuesta

9

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.

+7

... 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. –

+0

@ Lex, ¿algún ejemplo de operación de bloqueo y no bloqueo? Gracias. – Kalanidhi

+1

@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. –

0

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

4

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:

  1. E/S pasa de forma sincrónica con respecto al programa, mediante el bloqueo del programa hasta E/S está terminada
  2. 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
  3. 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 ...