태그 보관물: 리액터

리액터(Reactor) 패턴의 성능 향상 방안..

리액터(Reactor) 패턴을 사용해서 자바 네트워크 서버를 개발하다 보면, 동접을 2000 이상 붙여보면 성능저하를 확인할 수 있다. 그래서 리액터를 마스터-슬레이브(Master-Slave)의 구조로 개선하고, 슬레이브 리액터의 개수를 CPU 개수만큼 만들어서 성능을 개선할 수 있다. 아래는 이 구조를 쉽게 알수 있는 그림이다.^^

리액터(Reactor) VS 프로액터(Proactor)

리액터(Reactor)는 소켓이나 파일에서 이벤트가 발생하면, 동기(Sync) I/O를 수행할 수 있는 상태를 체크하고, 이벤트에 맞는 핸들러를 호출해서 이벤트를 처리하는 방식이다. 만약, 서버소켓으로 새로운 커넥션 요청이 들어오면, 리액터는 내부 스레드로 새로운 커넥션을 처리하는
핸들러(Acceptor)를 호출해서 커넥션을 처리한다.

프로액터(Proactor)는 하나 이상의 비동기 I/O를 초기화하거나 작업이 완료되서 발생한 이벤트를 처리하는 핸들러를 등록해서 처리한다. 프로액터가 비동기 I/O를 사용하는 경우, 유저 스레드가 I/O 작업을 직접 수행하지 않기에, 동시성 문제에 있어서 많은 이점을 누릴 수 있어서 성능을 향상시킬 수 있다.