Red de conocimientos turísticos - Información de alquiler - ¿Qué son IO síncronas y IO asíncronas?

¿Qué son IO síncronas y IO asíncronas?

La IO de archivos asíncronos también se denomina IO superpuesta.

En el archivo IO sincrónico, el subproceso inicia la operación IO, luego ingresa inmediatamente al estado de espera y no se activa hasta que se completa la operación IO para continuar con la ejecución. En el archivo IO asincrónico, el subproceso envía una solicitud de IO al kernel y luego continúa realizando otras operaciones. Cuando el kernel completa la solicitud de IO, notifica al subproceso que la operación de IO se ha completado.

Si ejecutar una solicitud de IO lleva mucho tiempo, la eficiencia de la IO de archivos asincrónicos mejorará significativamente, porque durante el tiempo que el subproceso está en espera, la CPU programará la ejecución de otros subprocesos, si los hay. Si no hay otros subprocesos para ejecutar (se puede programar el subproceso de página cero del sistema operativo), entonces este tiempo se desperdiciará. Si la solicitud de IO es muy rápida, entonces usar IO asíncrono sigue siendo ineficiente y es mejor usar IO sincrónico.

La E/S síncrona solo permite una operación de E/S a la vez, lo que significa que las operaciones de E/S en el mismo identificador de archivo se serializan, por lo que incluso con dos subprocesos, no se puede leer ni escribir en el mismo identificador de archivo al mismo tiempo. tiempo . La IO superpuesta permite que uno o más subprocesos emitan solicitudes de IO simultáneamente.

Cuando se completa una solicitud, la IO asíncrona notifica a la aplicación configurando el identificador del archivo en el estado señalado, o la aplicación puede ver si la solicitud de IO se ha completado usando GetOverlappedResult, o la aplicación puede recibir notificaciones a través del evento objetos.

Por ejemplo, la función DeviceIoControl se puede parametrizar para especificar si es síncrona o asíncrona. Si es síncrona, la función esperará a que se devuelva el resultado antes de ejecutar la siguiente instrucción. Si es asíncrono, DeviceIoControl regresa inmediatamente después de la llamada. Si los parámetros son correctos, devuelve ERROR_IO_PENDING (olvidé cómo escribirlo, pero debe haber la palabra PENDIENTE), y luego puede obtener el resultado devuelto a través de GetOverlappedResult, que es una estructura superpuesta cuando llamas a DeviceIoControl, se pasa como último parámetro. En términos generales, antes de realizar la última operación, primero se debe realizar una operación```En lo que respecta a IO, esto significa que debo completar. la operación IO``` antes de poder continuar con la última operación```

Async significa que introduje una operación en el sistema (puede ser una operación de Windows en el sistema (puede ser Windows o su propia biblioteca) ), iré a buscarlo más tarde, haré otra cosa ahora y lo traeré a IO y diré que traeré una operación de IO al sistema

.