Explicación simple para el "patrón de reactor" con sus aplicaciones [cerrado]

88

El patrón del reactor se explica en wikipedia y es un poco demasiado abstracto. ¿Puede describir este patrón de una manera más concreta? Idealmente, con fragmentos de código o diagramas de clases de alto nivel que describen algunas aplicaciones del patrón de reactor.

Eleco
fuente
3
Encontré que esta pregunta es una gran respuesta - stackoverflow.com/questions/9138294/…
Ryan Gibbons

Respuestas:

37

Es posible que desee consultar el documento original que lo describe http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf

El patrón de diseño de Reactor maneja las solicitudes de servicio que uno o más clientes entregan simultáneamente a una aplicación. Cada servicio de una aplicación puede constar de varios métodos y está representado por un controlador de eventos independiente que es responsable de enviar solicitudes específicas del servicio. El despacho de controladores de eventos lo realiza un despachador de iniciación, que administra los controladores de eventos registrados. La demultiplexación de las solicitudes de servicio se realiza mediante un demultiplexor de eventos síncrono.

reese
fuente
Como notará al leer el artículo, Douglas Schmidt et.al implementaron un marco C ++ modular y altamente eficiente llamado The Adaptive Communications Environment, donde el patrón Reactor juega un papel central. El marco en sí hace uso de una gran cantidad de patrones de diseño y vale la pena examinarlo solo por ese motivo. Si busca un marco portátil para construir backends C ++ altamente escalables, entonces vale la pena echarle un vistazo a ACE.
user2015735
1
@reese Link está roto hoy hombre :(
Allan Chua
1
@AllanChua Creo que lo encontré - dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
sergeyrar
3
OP pidió una explicación "simple y concreta", y usted ofreció algo que es incluso más abstracto que Wikipedia ...
Zhe
22

Un reactor permite que múltiples tareas que se bloquean (digamos debido a IO) se procesen de manera eficiente utilizando un solo hilo. El reactor gestiona un grupo de controladores y ejecuta un ciclo de eventos. Cuando se le llama para realizar una tarea, lo vincula con un controlador nuevo o vacante que lo activa. El bucle de eventos (1) encuentra todos los manejadores que están activos y desbloqueados (o delega esto a una implementación de despachador) (2) ejecuta cada uno de estos manejadores encontrados secuencialmente hasta que completan o llegan a un punto donde se bloquean. Los controladores completados se vuelven inactivos y vacíos para su reutilización, mientras que los controladores activos bloqueados ceden, lo que permite que continúe el ciclo de eventos. (3) Repite desde el paso (1)

Andrew Paté
fuente
1
Votar en contra porque esto no es correcto
SebNag
3
La idea central es realizar demultiplexación de eventos sincrónica. Los controladores de eventos solo se llaman si pueden ejecutarse sin bloqueo, por ejemplo, todo el paquete de datos está disponible en un conector de red, esperando que un controlador de eventos procese los datos. Esto hace posible llevar a cabo el controlador de eventos secuencialmente sin bloqueo
SebNag
2
"El patrón Reactor es responsable de la demultiplexación y el envío de múltiples controladores de eventos que se activan cuando es posible iniciar una operación de forma síncrona sin bloqueo". del documento vinculado en la respuesta aceptada
SebNag
Esto no es cierto en absoluto. Hay tantos hilos en un no reactor como en un patrón de reactor. En lugar de un bucle de eventos, puede tener un único hilo "impulsor" que no utilice el patrón observador / oyente de eventos. Misma actuación.
Zombies