2010-10-28 7 views
6

Estaba viendo cómo funcionan las estructuras twisted y node.js y estoy tratando de entender exactamente cómo el sistema operativo admite operaciones de E/S mediante devoluciones de llamada.¿Cómo se implementa la programación impulsada por eventos?

Entiendo que es bueno porque necesitamos menos hilos porque no necesitamos tener hilos bloqueados esperando operaciones de E/S. Pero algo tiene que llamar a la devolución de llamada una vez que finaliza la E/S.

¿Cómo se implementa esto con el sistema operativo?

Respuesta

5

Un enfoque es tener el sistema operativo adjuntar información sobre cualquier persona esperando una llamada de retorno a la estructura de datos relevantes, tal como el equivalente en el kernel del descriptor de archivo sobre el que está esperando la notificación de lectura. Cuando algo le sucede a ese descriptor de archivo, el sistema operativo escanea los servidores para ver si alguno debe ser notificado. Si deberían, entonces lo hace. Puede leer acerca de una implementación de esto en Lemon's paper introducing FreeBSD's kqueue mechanism. Consulte en particular la sección 6, "Implementación", subsecciones 3 y 4, "Actividad en el origen del evento" y "Entrega".

3

Esto se resuelve en el sistema operativo mediante el uso de "instalaciones/interfaces de notificación de eventos de E/S", por ejemplo, epoll, sondeo, kqueue o seleccione.

Eche un vistazo a deft, y especialmente su 'io/event loop para un ejemplo concreto de cómo se usan los' sistemas de notificación 'mencionados anteriormente. (java.nio.channels.Selector es la forma nio java para proporcionar una abstracción para esto.)

exención de responsabilidad: soy un confirmador hábil

Cuestiones relacionadas