Terminología
evento : un tipo de cosa que puede suceder.
disparo de eventos : una ocurrencia específica de un evento; Un evento sucediendo.
oyente de eventos : Algo que busca los disparos de eventos.
controlador de eventos : algo que ocurre cuando un escucha de eventos detecta un disparo de evento.
suscriptor de eventos : una respuesta que se supone que debe llamar el controlador de eventos.
Estas definiciones no dependen de la implementación, por lo que se pueden implementar de diferentes maneras.
Algunos de estos términos se confunden comúnmente con sinónimos, ya que a menudo no es necesario que los usuarios distingan entre ellos.
Escenarios comunes
Programación de eventos lógicos.
El evento es cuando se llama a algún método.
Un evento de activación es una llamada particular a ese método.
El detector de eventos es un enlace en el método de evento que se llama en cada disparo de evento que llama al controlador de eventos.
El controlador de eventos llama a una colección de suscriptores de eventos.
El (los) suscriptor (es) del evento realizan cualquier acción (es) que el sistema quiere que ocurra en respuesta a la ocurrencia del evento.
Eventos externos.
El evento es un evento externo que se puede inferir de los observables.
Un evento de activación es cuando ese evento externo puede ser reconocido como ocurrido.
El oyente de eventos detecta de alguna manera los disparos de eventos, a menudo sondeando los observables, luego llama al controlador de eventos al detectar un disparo de eventos.
El controlador de eventos llama a una colección de suscriptores de eventos.
El (los) suscriptor (es) del evento realizan cualquier acción (es) que el sistema quiere que ocurra en respuesta a la ocurrencia del evento.
Sondeo vs. inserción de ganchos en el mecanismo de disparo del evento
El punto hecho por otros es que las encuestas a menudo no son necesarias. Esto se debe a que los oyentes de eventos pueden implementarse haciendo que los disparos de eventos llamen automáticamente al manejador de eventos, que con frecuencia es la forma más eficiente de implementar cosas cuando los eventos son eventos a nivel del sistema.
Por analogía, no es necesario que revise su casilla de correo todos los días si el empleado postal llama a su puerta y le entrega el correo directamente.
Sin embargo, los oyentes de eventos también pueden trabajar sondeando. El sondeo no necesariamente necesita verificar un valor específico u otro observable; Puede ser más complejo. Pero, en general, el objetivo de la encuesta es inferir cuándo se ha producido algún evento para que pueda responderse.
Por analogía, debe revisar su casilla de correo todos los días cuando el empleado postal simplemente tira el correo en ella. No tendría que hacer este trabajo de votación si pudiera indicarle al empleado de correos que llame a su puerta, pero eso a menudo no es una posibilidad.
Encadenamiento de lógica de eventos
En muchos lenguajes de programación, puede escribir un evento que se llama simplemente cuando se presiona una tecla del teclado o en un momento determinado. Aunque se trata de eventos externos, no necesita sondearlos. ¿Por qué?
Es porque el sistema operativo está sondeando por usted. Por ejemplo, Windows busca cosas como cambios de estado del teclado, y si detecta uno, llamará a los suscriptores de eventos. Entonces, cuando se suscribe a un evento de pulsación de teclado, en realidad se está suscribiendo a un evento que es en sí mismo suscriptor de un evento que sondea.
Por analogía, supongamos que vive en un complejo de apartamentos y que un empleado de correos deja el correo en un área de recepción de correo comunitario. Luego, un trabajador similar al sistema operativo puede verificar ese correo para todos, entregando el correo a los apartamentos de aquellos que recibieron algo. Esto ahorra a todos los demás el problema de tener que sondear el área de recepción de correo.
Mi intuición supondría que el oyente del evento comprueba constantemente si el evento se ha disparado, lo que significa que, en mi escenario, no sería diferente a verificar cada cuadro si el evento se ha disparado.
Según la discusión en clase, parece que el oyente de eventos funciona de manera diferente.
¿Cómo funciona un oyente de eventos?
Como sospechaba, un evento puede funcionar mediante encuestas. Y si un evento está relacionado de alguna manera con eventos externos, por ejemplo, presionar una tecla del teclado, entonces el sondeo debe ocurrir en algún momento.
También es cierto que los eventos no necesariamente implican encuestas. Por ejemplo, si el evento es cuando se presiona un botón, entonces el detector de eventos de ese botón es un método que el marco de la GUI podría llamar cuando determina que un clic del mouse golpea el botón. En este caso, el sondeo todavía tenía que suceder para que se detectara el clic del mouse, pero el oyente del mouse es un elemento más pasivo conectado al mecanismo de sondeo primitivo a través del encadenamiento de eventos.
Actualización: en sondeo de hardware de bajo nivel
Resulta que los dispositivos USB y otros protocolos de comunicación modernos tienen un conjunto de protocolos de interacción bastante similar a la red para las interacciones, lo que permite que los dispositivos de E / S, incluidos teclados y ratones, participen en topologías ad hoc .
Curiosamente, las " interrupciones " son cosas sincrónicas bastante imperativas, por lo que no manejan topologías de red ad hoc . Para solucionar esto, las " interrupciones " se han generalizado en paquetes asincrónicos de alta prioridad llamados " transacciones de interrupción " (en el contexto de USB) o " interrupciones señalizadas por mensaje " (en el contexto de PCI). Este protocolo se describe en una especificación USB:
- " Figura 8-31. Máquina de estado del host de la transacción Bulk / Control / Interrupt OUT " en "Universal Serial Bus Specification, Revisión 2.0" , página impresa-222; PDF-página-250 (2000-04-27)
La esencia parece ser que los dispositivos de E / S y los componentes de comunicación (como los concentradores USB) básicamente actúan como dispositivos de red. Entonces, envían mensajes, lo que requiere sondear sus puertos y tal. Esto alivia la necesidad de líneas de hardware dedicadas.
Sistemas operativos como Windows parecen manejar el proceso de votación en sí, por ejemplo, como se describe en la documentación de MSDN para el USB_ENDPOINT_DESCRIPTOR
's que describe cómo controlar la frecuencia de Windows urnas un controlador de host USB para avisos de alarma / isócronas:
El bInterval
valor contiene el intervalo de sondeo para interrupción y puntos finales isócronos. Para otros tipos de punto final, este valor debe ignorarse. Este valor refleja la configuración del dispositivo en el firmware. Los conductores no pueden cambiarlo.
El intervalo de sondeo, junto con la velocidad del dispositivo y el tipo de controlador host, determina la frecuencia con la que el conductor debe iniciar una interrupción o una transferencia isócrona. El valor en bInterval
no representa una cantidad fija de tiempo. Es un valor relativo, y la frecuencia de sondeo real también dependerá de si el dispositivo y el controlador host USB funcionan a baja, plena o alta velocidad.
- "Estructura USB_ENDPOINT_DESCRIPTOR" , Hardware Dev Center, Microsoft
Los protocolos de conexión de monitor más nuevos como DisplayPort parecen hacer lo mismo:
Transporte multitransmisión (MST)
-Slide # 14 de "Descripción general de DisplayPortTM Ver.1.2" (06/12/2010)
Esta abstracción permite algunas características interesantes, como ejecutar 3 monitores desde una conexión:
DisplayPort Multi-Stream Transport también permite conectar tres o más dispositivos entre sí, pero, por el contrario, menos configuración orientada al "consumidor": al mismo tiempo, manejar múltiples pantallas desde un solo puerto de salida.
- "DisplayPort" , Wikipedia
Conceptualmente, el punto a sacar de esto es que los mecanismos de sondeo permiten comunicaciones en serie más generalizadas, lo cual es increíble cuando se desea una funcionalidad más general. Entonces, el hardware y el sistema operativo realizan muchas encuestas para el sistema lógico. Luego, los consumidores que se suscriben a eventos pueden disfrutar de esos detalles que el sistema de nivel inferior maneja para ellos, sin tener que escribir sus propios protocolos de sondeo / transmisión de mensajes.
En última instancia, los eventos como las pulsaciones de teclas parecen pasar por una serie de eventos bastante interesante antes de llegar al imperativo mecanismo de activación de eventos del nivel de software.