Modelo IO detallado (fácil de entender)

inserte la descripción de la imagen aquí

¿Qué es E/S?

I/O (Entrada/Salida) significa entrada/salida.

Primero interpretemos la E/S desde la perspectiva de la estructura de la computadora .

Según la estructura de von Neumann, la estructura de la computadora se divide en cinco partes: unidad aritmética, controlador, memoria, dispositivo de entrada y dispositivo de salida.
inserte la descripción de la imagen aquí
Los dispositivos de entrada (como teclados) y los dispositivos de salida (como monitores) son dispositivos externos. Las tarjetas de red y los discos duros pueden pertenecer tanto a dispositivos de entrada como a dispositivos de salida.

Los dispositivos de entrada ingresan datos a la computadora y los dispositivos de salida reciben la salida de datos de la computadora.

Desde la perspectiva de la arquitectura informática, la E/S describe el proceso de comunicación entre un sistema informático y dispositivos externos.

Primero interpretemos la E/S desde el punto de vista de la aplicación.

De acuerdo con el conocimiento relacionado con el sistema operativo aprendido en la universidad: Para garantizar la estabilidad y seguridad del sistema operativo, el espacio de direcciones de un proceso se divide en espacio de usuario (espacio de usuario) y espacio de kernel (espacio de kernel).

Las aplicaciones que normalmente ejecutamos se ejecutan en el espacio del usuario, y solo el espacio del kernel puede realizar operaciones relacionadas con los recursos a nivel del sistema, como la administración de archivos, la comunicación de procesos, la administración de memoria, etc. Es decir, si queremos realizar operaciones de E/S, debemos confiar en las capacidades del espacio del kernel.

Además, los programas en el espacio del usuario no pueden acceder directamente al espacio del kernel.

Cuando desee realizar operaciones de E/S, debido a que no hay permiso para realizar estas operaciones, solo puede iniciar una llamada al sistema para solicitar la ayuda del sistema operativo.

Por lo tanto, si el proceso de usuario desea realizar operaciones de E/S, debe acceder indirectamente al espacio del kernel a través de llamadas al sistema.

Estamos más expuestos a E/S de disco (leer y escribir archivos) y E/S de red (solicitudes y respuestas de red) en el proceso de desarrollo habitual.

Desde el punto de vista de la aplicación, nuestra aplicación inicia llamadas de E/S (llamadas al sistema) al núcleo del sistema operativo, y el núcleo responsable del sistema operativo realiza operaciones de E/S específicas. Es decir, nuestra aplicación en realidad solo inicia la llamada de la operación IO, y el núcleo del sistema operativo completa la ejecución de la IO específica.

Cuando una aplicación realiza una llamada de E/S, pasa por dos pasos:

  1. El kernel espera a que el dispositivo de E/S esté listo para los datos.
  2. El núcleo copia datos del espacio del núcleo al espacio del usuario.

¿Cuáles son los modelos IO comunes?

Bajo el sistema UNIX, hay cinco modelos de E/S: E/S de bloqueo sincrónico, E/S sin bloqueo sincrónico, multiplexación de E/S, E/S controlada por señal y E/S asíncrona.

Estos son también los 5 modelos IO que mencionamos a menudo.

3 modelos IO comunes en Java

BIO (E/S de bloqueo)

BIO pertenece al modelo IO de bloqueo síncrono.

En el modelo de E/S de bloqueo síncrono, después de que la aplicación inicia una llamada de lectura, se bloqueará hasta que el kernel copie los datos en el espacio del usuario.
inserte la descripción de la imagen aquí
En el caso de que el número de conexiones de clientes no sea alto, no hay problema. Sin embargo, frente a 100.000 o incluso millones de conexiones, el modelo BIO tradicional es impotente. Por lo tanto, necesitamos un modelo de procesamiento de E/S más eficiente para hacer frente a una mayor concurrencia.

NIO (Sin bloqueo/Nueva E/S)

NIO en Java se introdujo en Java 1.4, correspondiente al paquete java.nio, que proporciona abstracciones como Channel, Selector y Buffer. N en NIO puede entenderse como No bloqueante, no simplemente Nuevo. Admite operaciones de E/S basadas en canales y orientadas al búfer. Para aplicaciones (de red) de alta carga y alta simultaneidad, se debe utilizar NIO.

NIO en Java puede verse como un modelo de multiplexación de E/S. También hay muchas personas que creen que NIO en Java pertenece al modelo IO síncrono sin bloqueo.

Sigue mis ideas y mira hacia abajo, ¡creo que obtendrás la respuesta!

Veamos primero el modelo de E/S síncrono sin bloqueo.
inserte la descripción de la imagen aquí

En el modelo de E/S síncrono sin bloqueo, la aplicación siempre iniciará llamadas de lectura y esperará a que los datos se copien del espacio del kernel al espacio del usuario. El subproceso seguirá bloqueado hasta que los datos se copien al espacio del usuario en el kernel. .

Comparado con el modelo de E/S de bloqueo síncrono, el modelo de E/S sin bloqueo síncrono es de hecho una gran mejora. Al sondear la operación, evita el bloqueo todo el tiempo.

Sin embargo, este modelo de E/S también tiene problemas: el proceso de la aplicación que sondea constantemente si los datos están listos para la llamada del sistema de E/S consume mucha CPU.

En este punto, entra en juego el modelo de multiplexación de E/S .
inserte la descripción de la imagen aquí

En el modelo de multiplexación de E/S, el subproceso primero inicia una llamada de selección para preguntar al kernel si los datos están listos y, cuando el kernel prepara los datos, el subproceso del usuario inicia una llamada de lectura. El proceso de la llamada de lectura (datos del espacio del kernel -> espacio del usuario) aún está bloqueado.

目前支持 IO 多路复用的系统调用,有 select,epoll 等等。select 系统
调用,目前几乎在所有的操作系统上都有支持。
 select 调用 :内核提供的系统调用,它支持一次查询多个系统调用的可
 用状态。几乎所有的操作系统都支持。
  epoll 调用 :linux 2.6 内核,属于 select 调用的增强版本,优化了
   IO 的执行效率。

El modelo de multiplexación de IO reduce el consumo de recursos de la CPU al reducir las llamadas al sistema no válidas.

NIO en Java tiene un concepto muy importante de selector (Selector), que también se puede llamar multiplexor. Con él, solo se necesita un hilo para administrar múltiples conexiones de clientes. Cuando lleguen los datos del cliente, se servirá.
inserte la descripción de la imagen aquí

AIO (E/S asíncrona)

AIO es también NIO 2. Una versión mejorada de NIO, NIO 2, se introdujo en Java 7, que es el modelo IO asíncrono.

El IO asíncrono se implementa en función del evento y el mecanismo de devolución de llamada, es decir, la aplicación regresará directamente después de la operación y no se bloqueará allí. Cuando se complete el procesamiento en segundo plano, el sistema operativo notificará al subproceso correspondiente para realizar operaciones posteriores. .
inserte la descripción de la imagen aquí
En la actualidad, la aplicación de AIO no es muy extensa. Netty probó AIO antes, pero se dio por vencido. Esto se debe a que después de que Netty usa AIO, el rendimiento en los sistemas Linux no mejora mucho.

Finalmente, tomemos una foto para resumir brevemente BIO, NIO y AIO en Java.
inserte la descripción de la imagen aquí

Bienvenido a agregar

Supongo que te gusta

Origin blog.csdn.net/JIAYOUYAA/article/details/124456897
Recomendado
Clasificación