La tecnología subyacente que apoya a Java Nio y NodeJs
Como todos sabemos, se ha agregado cierto apoyo a Java Nio y NiO2 a versiones recientes de Java. Al mismo tiempo, una de las ventajas más elogiadas de la pila de tecnología NodeJS es su IO de alto rendimiento. Entonces, el tema que vamos a discutir hoy son las tecnologías subyacentes que respaldan estas tecnologías.
Una pregunta para hacer antes de comenzar es:
¿Por qué no aparecieron NodeJS y Java NiO2 antes?
Respuesta: Personalmente, creo que la tecnología de soporte subyacente aún no es madura.
Entonces, ¿qué significa la tecnología subyacente? Sí, creo que muchas personas han adivinado que es tecnología del sistema operativo. Los dos conceptos propuestos en este artículo, Java NIO2 y NodeJS, son tecnologías de estado de usuario o tecnologías de capas de aplicaciones, y estas tecnologías de capas de aplicaciones se ejecutan en el sistema operativo. Al mismo tiempo, con el avance del sistema operativo, los modelos de programación que pueden ser compatibles también son más ricos. Se puede decir que estas dos tecnologías están completamente evolucionadas para aplicar los dividendos traídos por el progreso del sistema operativo. En términos generales, la tecnología que primero disfruta de esta bonificación debe ser C/C ++, porque la mayoría de los últimos avances en el sistema operativo proporcionan llamadas al sistema, y C/C ++ es el más conveniente para aplicar estas llamadas del sistema, pero también es la más compleja. Para obtener el mismo rendimiento, otras plataformas deben evolucionar constantemente y empaquetar para que los usuarios puedan usar estos dividendos. Una vez que esa plataforma se estanca y actualiza, es hora de que esta plataforma disminuya. Cuanto más conveniente sea encapsular, más amigable es para el usuario y más personas pueden usarlo. Aunque muchas personas pueden escribir rápidamente código basado en estas plataformas, a menudo no entienden la esencia porque esencialmente no entienden las motivaciones y principios de estas tecnologías. Las tecnologías que estamos discutiendo a continuación son las tecnologías subyacentes relacionadas con estas dos tecnologías.
No importa qué diseño del sistema operativo, los siguientes 5 modelos IO son esenciales.
1. Bloqueo de E/S
2. E/S sin bloqueo
3. Multiplexación de E/S (Seleccionar, Poll y Epoll)
4. E/S de transmisión de señal (Sigio)
5. E/S asíncrono (las funciones Posix AIO_)
1. Bloqueo de E/S
Como se muestra en la figura, la ventaja de este modelo IO es que es simple programar y también es uno de los primeros modelos IO compatibles con OS. La desventaja es que el sistema llama a la ejecución dinámica de los hilos de los usuarios, lo que resulta en un tiempo perdido en el tiempo de la CPU y la baja eficiencia IO.
2. E/S sin bloqueo
Como se muestra en la figura, una mejora de este modelo IO es que IO no es bloqueo, pero requiere largas encuestas, que también desperdicia ciclos de reloj de la CPU.
3. Multiplexación de E/S (Seleccionar, Poll y Epoll)
Como se muestra en la figura, este modelo IO es el modelo IO más estable proporcionado por OS hoy. La mayoría de las aplicaciones convencionales se basan en este modelo IO, como NodeJS. Sin embargo, estas plataformas a menudo agregan una capa de encapsulación a este modelo para admitir directamente AIO.
4. E/S de transmisión de señal (Sigio)
Como se muestra en la figura, los registros de datos de que este modelo IO no tiene ventajas de rendimiento en el Modelo 3 de comparación y rara vez es utilizado por los diseñadores debido a la inestabilidad en el soporte del sistema.
5. E/S asíncrono (las funciones Posix AIO_)
Como se muestra en la figura, este modelo IO es el AIO más perfecto, y el modelo de programación también es el más simple, pero hay muy pocas osiciones que pueden soportar perfectamente el modelo. La información en línea muestra que Linux está haciendo esfuerzos a este respecto. Una vez que el sistema operativo avanza en este aspecto, el marco de programación, la plataforma y el modelo de programación aún pueden necesitar ser simplificados enormemente.
Aunque este modelo rara vez es compatible con el sistema operativo, no significa que ahora no exista tal modelo AIO. Muchos marcos han realizado este aspecto y simulado AIO en el modo de usuario, lo que permite a los usuarios prestar más atención al código lógico de negocios.
6. Síncrono asíncrono, bloqueo y sin bloqueo
Síncrono y asíncrono son para la interacción entre la aplicación y el núcleo. Los datos se leen y luego el retorno es sincrónico, y el retorno es asíncrono. El bloqueo y el no bloqueo son para procesos e hilos. El hilo de lectura o escritura está esperando en modo de bloqueo, en lugar del modo de bloqueo, el hilo de lectura o escritura devuelve inmediatamente un valor de estado.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.