Red de conocimiento informático - Consumibles informáticos - ¿Cuál es la diferencia entre red io con y sin bloqueo?

¿Cuál es la diferencia entre red io con y sin bloqueo?

La principal diferencia entre IO con bloqueo y IO sin bloqueo es la primera etapa. Es decir, el bloqueo de IO seguirá esperando hasta que el búfer del socket esté listo. En lugar de bloquear IO, regresará inmediatamente cuando el búfer del socket no esté listo.

La obtención de datos IO se divide en dos etapas, una es la etapa de preparación del búfer del socket y la otra es la etapa de copia de datos (el kernel copia los datos del búfer del socket al espacio del usuario). El estado predeterminado de un socket es bloqueo, pero hay dos formas de cambiar el indicador de bloqueo. Una es configurar directamente el socket para que no sea bloqueante y la otra es configurar el indicador de bloqueo en el método.

Resumen

En IO sin bloqueo, el programa de usuario consulta continuamente mediante sondeo, lo que provoca un alto uso de la CPU (cambiando entre el modo kernel y el modo usuario).

Por lo tanto, IO sin bloqueo se usa generalmente junto con la tecnología de multiplexación IO, selección, sondeo, etc. (De hecho, seleccionar y sondear también sondean continuamente varios sockets, pero en el estado del núcleo).

Este método mejora enormemente la robustez y estabilidad del programa y es la primera opción para la programación de redes de alto rendimiento en Linux.