¿Cómo se implementa la programación orientada a eventos?
-
27-09-2019 - |
Pregunta
Me estaba mirando cómo el retorcido y Node.js marcos de trabajo y estoy tratando de entender exactamente cómo los soportes del sistema operativo de E / S operaciones usando devoluciones de llamada.
Yo entiendo que es bueno porque necesitamos menos hilos porque no hacemos necesidad de haber bloqueado subprocesos en espera para las operaciones de E / S. Pero algo tiene que llamar a la devolución de llamada una vez que la E / S está terminado.
¿Cómo se esta implementado por el sistema operativo?
Solución
Uno de los enfoques es que los unen OS información sobre cualquiera de espera para una devolución de llamada a la estructura de datos relevantes, tales como el equivalente en el núcleo del archivo descriptor de que usted está esperando una notificación de lectura acerca. Cuando algo le sucede a ese descriptor de archivo, el sistema operativo explora los camareros para ver si alguno debe ser notificado. Si lo que deberían, a continuación, lo hace. Usted puede leer acerca de una implementación de este href="http://people.freebsd.org/~jlemon/papers/kqueue.pdf" rel="noreferrer"> papel en kqueue . Véase en particular la sección 6, "Aplicación", apartados 3 y 4, "La actividad en Origen del suceso" y "entrega".
Otros consejos
Esto se resuelve en OS mediante el uso de "I / O instalaciones de notificación de eventos / interfaces", por ejemplo epoll , encuesta, kqueue o seleccionar.
Tome un vistazo a hábil , y especialmente su io / evento bucle para un ejemplo concreto de cómo los 'sistemas de notificación' mencionados anteriormente son usado. ( java.nio. channels.Selector es la forma java nio para proporcionar una abstracción para esto.)
descargo de responsabilidad: im un hábil committer