Las preguntas más comunes que se hacen en la entrevista recientemente son el campo IO. Algunos de ellos han sido respondidos, mientras que algunos de ellos no han respondido bien. Recientemente, he comenzado a aprender más sobre algunas de estas cosas y quiero resumirlas.
Punto frontal
1. Espacio del sistema de espacio de usuario
El sistema Linux dividirá un proceso en dos espacios, espacio de usuario y espacio del sistema. Por ejemplo, nuestra codificación normal es todo espacio de usuario. Si necesitamos llamar a las funciones del sistema, como copiar archivos del sistema, necesitamos llamar a los componentes del sistema, obtener servicios de núcleo y completar operaciones.
Dos etapas de io
El proceso de ejecución de IO se divide en dos etapas, esperando que listo para ejecutar copia
Esperando listo: sabemos que cuando realizamos operaciones IO, los datos pueden provenir de otras aplicaciones o redes. Si no hay datos, el sistema operativo lo esperará. En este momento, la aplicación también puede esperar para copiar: copiar los datos al espacio de trabajo de la aplicación
Bloqueo y no bloqueo, sincrónico y asincrónico
Hablemos primero sobre la sincronización y la asíncrona. Lo más fácil es ver si se inicia un hilo o proceso para completar el IO. Al sincronizar IO, el sistema se detendrá y esperará a que esto termine antes de hacer otras cosas. Asynchronous IO utiliza un método de subproceso múltiple para iniciar un nuevo hilo para hacer esto, y puede hacer otras cosas y esperar una notificación.
Hablemos de bloquear y no bloquear. Estas dos cosas realmente se centran en el estado del programa cuando se espera el resultado de la llamada. Bloquear significa que cuando obtenga este resultado, colgará hasta que espere el resultado completo. Sin bloquear significa que cuando el proceso no puede obtener el resultado, no hay hilo de bloqueo. Esto está un poco enredado. Hay una explicación común. Si está bloqueando, quiero obtener esto. Durante el proceso de adquisición, pierdo la CPU. No obtendré la CPU hasta el resultado. Sin embargo, si no estoy bloqueando, continuaré sosteniendo la CPU y aún puedo verificarla.
Varios modelos IO
Actualmente hay 5 tipos
Bloqueando IO
El tipo de IO más tradicional, es decir, leer y escribir se bloqueará
IO sin bloqueo
Cuando el usuario inicia la lectura, no perderá la CPU, seguirá revisando. Si no tiene éxito, se devolverá un error. Si recibe una señal exitosa, iniciará una operación de lectura para obtener el resultado completo.
Multiplexación IO
Este es el núcleo de Java Nio. Habrá un hilo que administra el estado de múltiples enchufes para verificar si está listo. Solo cuando encuentres que estás realmente listo, llamarás a la CPU para realizar operaciones IO. Esto es más importante
Signal Drive IO
Usar menos, ignorar
Io asincrónico
Obtener un hilo para ejecutar