La diferencia entre las entrevistas de nio bio aio
Las diferencias entre nio bio aio son las siguientes:
BIO se llama IO de bloqueo, que es el modo IO tradicional antes de JDK 1.4 y en sí mismo es un modo de bloqueo sincrónico.
Después de que un subproceso inicia una solicitud de IO, bloqueará IO hasta que el búfer esté listo para recibir datos y luego continuará con la siguiente operación. Para la comunicación de red, aunque el método de solicitud-respuesta simplifica el desarrollo de aplicaciones de capa superior, todavía tiene enormes cuellos de botella en términos de rendimiento y confiabilidad. Imagínese si cada solicitud requiere que se procese específicamente un nuevo hilo, entonces en Alta concurrencia. En estos escenarios, los recursos de la máquina se agotarán rápidamente.
NIO, también conocido como IO sin bloqueo, es un modelo de IO sincrónico sin bloqueo.
El hilo inicia una solicitud de IO y regresa inmediatamente (IO sin bloqueo). Síncrono significa que debe esperar a que los datos en el búfer de IO estén listos, mientras que sin bloqueo significa que el hilo del usuario no necesita esperar a que el búfer de IO esté listo, puede realizar algunas otras operaciones primero, pero debe sondear periódicamente para verificar si los datos en el búfer de IO están listos. De hecho, es tecnología de multiplexación NIO plus IO.
El NIO ordinario se refiere al sondeo de subprocesos sobre si el búfer de IO está listo, mientras que el nuevo IO en Java se refiere al sondeo de subprocesos sobre cuál de un montón de búferes de IO está listo. Este es un tipo de IO múltiple. canal Reutilizar ideas. En el modelo de multiplexación de IO, la tarea de verificar si los datos de IO están listos se entrega al modelo de selección o epoll a nivel de sistema, que es monitoreado por el sistema, aliviando así la tarea del hilo del usuario de verificar si los datos de IO están listos. listo.
NIO integra tres tecnologías principales: buffers, canales y selectores, donde los datos se obtienen a través de un buffer de copia cero, y cada cliente se registra con el selector (multiplexor) a través del canal.
El servidor sondeará continuamente el canal para obtener información del cliente. Hay cuatro identificadores de estado en el canal: conectado, aceptado (bloqueado), leído (legible) y escrito (escribible). Realizar operaciones posteriores según la identificación. Por lo tanto, el servidor puede recibir un número ilimitado de canales sin abrir nuevos hilos. Esto mejora enormemente el rendimiento.
AIO es un verdadero modelo IO asincrónico sin bloqueo.
La implementación NIO anterior requiere que el subproceso del usuario realice un sondeo periódicamente para verificar si los datos del búfer IO están listos, lo que consume los recursos del subproceso de la aplicación. De hecho, el sondeo es equivalente al bloqueo, lo que realmente no libera el hilo actual, porque aún necesita consultar qué IO está listo.
El verdadero estado ideal de IO asíncrona sin bloqueo sería dejar que el sistema del kernel haga el trabajo, y el hilo del usuario solo necesita decirle al kernel que me notifique cuando el búfer esté listo, o ejecutar el función de devolución de llamada que te di.
AIO puede lograr una verdadera operación asincrónica, pero la implementación es complicada. Hay muy pocos sistemas operativos que admitan IO asincrónica pura. Actualmente, también se implementa a través de la tecnología IOCP en Windows y en Linux, la más baja. nivel Todavía implementado usando epoll.