Reactor Pattern
을 적용한 Java NIO를 사용하는 간단한 서버 클라이언트 애플리케이션을 작성하고 있습니다. 내 이해에 Reactor
클래스는 Events
(예 : OP_ACCEPT, OP_READ, OP_WRITE)을 수집해야합니다.리액터 패턴의 개별 스레드에서 이벤트 핸들러 전달
상대적인 EventHandler
은 특정 작업을 담당하므로 처리기가 별도의 스레드에서 비동기 적으로 실행되어야한다고 생각합니다. 여기
내가이 실행 , 그것은 몇 가지 문제를 보여줍니다 계속 실행 while 루프와 Selector
은 (1,4,16)의 설정 readyOps을 반환 유지합니다. 나는 AcceptHanndler
이 차단 방법으로 OP_ACCEPT
을 처리하지 않았기 때문에, 반복자에서 키가 제거되는 이벤트이므로 select()
후에 다시 표시됩니다. 내가 사건을 맡아서는 안되. 달리기를 행선지로?
edge-triggered
및 level-triggered
모델의 개념이 내 마음에 온다 ... 이유는 선택기가 level-triggered
모델에서 실행되기 때문에 이유는 무엇입니까?
Selectors의 요점은 별도의 스레드를 사용해야하는 모자가 아닙니다. – EJP
'Selector'의 요점은 하나의 스레드에서 다중 소켓을 관리하는 것입니다. 클라이언트 당 스레드를 사용하지 않았습니다. – JasonHuang
당신은 그것보다 훨씬 더 잘하고 있습니다. 기본적으로 선택기 이벤트 당 스레드 *를 사용하고 있습니다. 현재 스레드에서 핸들러를 실행하고 데이터베이스 액세스, *를 * 완료 한 후 장기 실행 이벤트에 대한 보조 스레드 만 사용하십시오. 수락 또는 읽기를 완료했거나 이벤트가 현재 스레드에있는 모든 위치에서 완료하십시오. 기본 모델이 깨졌습니다. – EJP