응용 프로그램과 함께 "반응기 패턴"에 대한 간단한 설명 [닫기]


88

원자로 패턴은 위키피디아에 설명되어 있으며 너무 추상적입니다. 이 패턴을 좀 더 구체적으로 설명 할 수 있습니까? 리액터 패턴의 일부 애플리케이션을 설명하는 코드 스 니펫 또는 고수준 클래스 다이어그램이 이상적입니다.


3
- 좋은 해답이 될이 질문을 찾을 수 stackoverflow.com/questions/9138294/...
라이언 기븐스

답변:


37

http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf를 설명하는 원본 문서를 확인하는 것이 좋습니다.

Reactor 디자인 패턴은 하나 이상의 클라이언트가 애플리케이션에 동시에 전달하는 서비스 요청을 처리합니다. 애플리케이션의 각 서비스는 서버 메서드로 구성 될 수 있으며 서비스 별 요청을 발송하는 별도의 이벤트 핸들러로 표현됩니다. 이벤트 핸들러 디스패치는 등록 된 이벤트 핸들러를 관리하는 시작 디스패처에 의해 수행됩니다. 서비스 요청의 역 다중화는 동기식 이벤트 역 다중화기에 의해 수행됩니다.


기사를 읽을 때 알 수 있듯이 Douglas Schmidt et.al은 Reactor 패턴이 중심 역할을하는 적응 형 통신 환경이라는 매우 효율적인 모듈 식 C ++ 프레임 워크를 구현했습니다. 프레임 워크 자체는 과다한 디자인 패턴을 사용하며이를 위해서만 검토 할 가치가 있습니다. 확장 성이 뛰어난 C ++ 백엔드를 구축하기위한 휴대용 프레임 워크를 찾고 있다면 ACE를 살펴볼 가치가 있습니다.
user2015735

1
@reese 링크가 오늘 깨졌습니다 man :(
Allan Chua

1
@AllanChua 내가 찾은 것 같아요 -dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
sergeyrar

3
OP는 "간단하고 구체적인"설명을 요청했고 Wikipedia보다 훨씬 더 추상적 인 것을 제안했습니다 ...
Zhe

22

리액터를 사용하면 차단하는 여러 작업 (예 : IO로 인해)을 단일 스레드를 사용하여 효율적으로 처리 할 수 ​​있습니다. 리액터는 핸들러 풀을 관리하고 이벤트 루프를 실행합니다. 작업을 수행하기 위해 호출 될 때 새로운 또는 비어있는 핸들러와 연결하여 활성화합니다. 이벤트 루프 (1)는 활성화되고 차단 해제 된 모든 핸들러를 찾습니다 (또는 디스패처 구현에 위임) (2) 발견 된 핸들러 각각을 완료하거나 차단하는 지점에 도달 할 때까지 순차적으로 실행합니다. 완료된 핸들러는 재사용을 위해 비활성화되고 비어있는 반면 차단 된 활성 핸들러는 양보하여 이벤트 루프를 계속할 수 있습니다. (3) 단계 (1)부터 반복


1
정확하지 않기 때문에 반대 투표
SebNag

3
핵심 아이디어는 동기식 이벤트 역 다중화를 수행하는 것입니다. 이벤트 핸들러는 비 차단 방식으로 실행할 수있는 경우에만 호출됩니다. 예를 들어 전체 데이터 패킷이 네트워크 소켓에서 사용 가능하고 이벤트 핸들러가 데이터를 처리 할 때까지 기다립니다. 이를 통해 비 차단 방식으로 이벤트 핸들러를 순차적으로 수행 할 수 있습니다
SebNag

2
"리액터 패턴은 차단없이 작업을 동 기적으로 시작할 수있을 때 트리거되는 여러 이벤트 핸들러의 디 멀티플렉싱 및 디스패치를 ​​담당합니다." 승인 된 anwser에 링크 된 논문에서
SebNag

이것은 전혀 사실이 아닙니다. 비 반응기에는 원자로 패턴에있는만큼의 스레드가 있습니다. 이벤트 루프 대신 관찰자 / 이벤트 청취자 패턴을 사용하지 않는 단일 "구동"스레드를 가질 수 있습니다. 동일한 성능.
Zombies
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.