¿Cuál es la relación entre bloqueo, no bloqueo y subprocesos múltiples en lenguaje C?
El bloqueo es que en la programación de red tradicional, confiamos en ServerSocket y Socket para la comunicación. El marco general es que ServerSocket llama al método de aceptación y espera la conexión del cliente. socket del lado del servidor Los sockets del lado del cliente y del servidor han establecido canales de entrada y salida para la comunicación. Durante este proceso de E/S de red, tanto el método de lectura de inputStream como el método de escritura de outputStream pueden causar bloqueo. Para reducir el impacto de este bloqueo en otras conexiones, generalmente se abre un nuevo subproceso en el lado del servidor para cada conexión, o se utiliza la tecnología de grupo de subprocesos para evitar la creación y destrucción de subprocesos y, al mismo tiempo, admitir la concurrencia hasta cierto punto. Sin embargo, en este caso, si una gran cantidad de lecturas o escrituras bloquean el grupo de subprocesos, la eficiencia del grupo de subprocesos se reducirá considerablemente y el sistema operativo también deberá manejar cambios frecuentes de CPU.
La comunicación sin bloqueo es en realidad una extensión del modelo anterior. Su idea central es agregar funciones de monitoreo de eventos a los sockets tradicionales. Una vez que el sistema operativo puede monitorear eventos en sockets y servidores. Se produce una conexión o un evento legible o escribible, el oyente devolverá la notificación correspondiente al objeto registrado para el evento. El mecanismo para implementar esto en javaNIO es reescribir socket y ServerSocket en SocketChanel y ServerSocketChanel. Su implementación subyacente todavía usa sockets, por lo que, en principio, el paquete javaNIO puede implementar completamente los modos de programación con y sin bloqueo. La función de monitoreo de eventos la completa la clase Selección. Utiliza el método de selección para bloquear y escuchar si ocurre el evento registrado. Para cada evento que ocurra, devolverá una clave de selección. A través de esta clave, podemos determinar el origen de la. evento (socket) e información relacionada. Para ServerSocketChanel, Socketchanel corresponde a diferentes eventos. ServerChanel solo tiene OP_ACCEPT para representar si se puede aceptar la conexión, mientras que socketChanel tiene OP_CONNECT, eventos de lectura y escritura. El autor cree que, en comparación con el bloqueo de IO, su ventaja es que puede evitar el bloqueo de lectura y escritura, porque esta comparación tiene un significado práctico. Por ejemplo, en un sistema de transferencia de archivos de red, el método de lectura puede bloquearse varias veces debido a razones de red. Si se utiliza la lectura IO sin bloqueo, el hilo puede regresar inmediatamente para manejar otras tareas.
Múltiples subprocesos son unidades independientes que se dividen a su vez en procesos.