Explicação simples para o "padrão do reator" com seus aplicativos [fechado]


88

O padrão do reator é explicado na wikipedia e é um pouco abstrato. Você pode descrever esse padrão de uma forma mais concreta? Idealmente, com fragmentos de código ou diagramas de classe de alto nível que descrevem algumas aplicações do padrão de reator.


3
Esta pergunta é uma ótima resposta - stackoverflow.com/questions/9138294/…
Ryan Gibbons

Respostas:


37

Você pode querer verificar o artigo original que o descreve http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf

O padrão de design do Reactor lida com solicitações de serviço que são entregues simultaneamente a um aplicativo por um ou mais clientes. Cada serviço em um aplicativo pode consistir em métodos serveral e é representado por um manipulador de eventos separado que é responsável por despachar solicitações específicas do serviço. O despacho de manipuladores de eventos é executado por um dispatcher de iniciação, que gerencia os manipuladores de eventos registrados. A demultiplexação de solicitações de serviço é executada por um demultiplexador de eventos síncronos.


Como você notará ao ler o artigo, Douglas Schmidt et.al implementou uma estrutura C ++ altamente eficiente e modular chamada The Adaptive Communications Environment, onde o padrão Reactor desempenha um papel central. A estrutura em si faz uso de uma infinidade de padrões de design e vale a pena examiná-la apenas por causa disso. Se você procura uma estrutura portátil para construir back-ends C ++ altamente escalonáveis, vale a pena dar uma olhada no ACE.
user2015735

1
@reese Link foi quebrado hoje, cara :(
Allan Chua,

1
@AllanChua Acho que encontrei - dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
sergeyrar

3
OP pediu uma explicação "simples e concreta", e você ofereceu algo que é ainda mais abstrato do que a Wikipedia ...
Zhe

22

Um reator permite que várias tarefas que bloqueiam (digamos devido a IO) sejam processadas de forma eficiente usando um único thread. O reator gerencia um pool de manipuladores e executa um loop de eventos. Quando é chamado para executar uma tarefa, ele o vincula a um manipulador novo ou vazio, tornando-o ativo. O loop de evento (1) encontra todos os manipuladores que estão ativos e desbloqueados (ou delega isso a uma implementação de despachante) (2) executa cada um desses manipuladores encontrados sequencialmente até que sejam concluídos ou cheguem a um ponto em que sejam bloqueados. Os manipuladores concluídos tornam-se inativos e vazios para reutilização, enquanto os manipuladores ativos bloqueados se rendem, permitindo que o loop de eventos continue. (3) Repete a partir da etapa (1)



3
A ideia central é realizar a demultiplexação de eventos síncronos. Os tratadores de evento só são chamados se puderem ser executados de maneira não bloqueadora, por exemplo, todo o pacote de dados está disponível em um soquete de rede, esperando que um tratador de evento processe os dados. Isso torna possível realizar o manipulador de eventos sequencialmente de maneira não bloqueadora
SebNag

2
"o padrão Reactor é responsável por demultiplexar e despachar vários manipuladores de eventos que são acionados quando é possível iniciar uma operação de forma síncrona sem bloqueio." do artigo com
link na resposta

Isto não é verdade, de forma alguma. Há tantos fios em um não reator quanto em um padrão de reator. Em vez de um loop de evento, você pode ter um único encadeamento "direcionador" que não usa o padrão observador / ouvinte de evento. Mesmo desempenho.
Zombies
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.