6.셀렉터
기본적으로 스레드는 한 번에 하나의 채널만 다룰 수 있었음
만약 하나의 스레드가 3개의 클라이언트 연결을 받아서 입출력을 수행해야 하는 경우,
스레드는 3개의 채널 중 어떤 채널에서 먼저 데이터를 받아야 할지 알 수가 없음
따라서 만약 스레드가 하나의 채널에서 데이터가 올 때까지 무한히 기다릴 경우,
다른 채널에서 데이터가 먼저 들어온 경우에도 해당 채널은 스레드가 기다리던 채널의 데이터가 올 때까지 차단됨(blocked)
셀렉터, Selector
셀렉터(Selector)는 하나의 스레드가 여러 개의 채널을 동시에 다룰 때 사용되는 클래스
Selector를 통해 하나의 스레드에서 여러 개의 채널(Socket)에 대해 모니터링을 수행할 수 있음
→ 입출력 다중화를 통해 동작
Selector는 하나 이상의 채널을 셀렉터에 등록한 후, 등록된 채널들 중에서 이벤트 준비가 완료된 하나 이상의 채널이 생길 때까지 차단됨(blocked)
또한 각 채널에서 발생한 소켓 연결, 데이터 입출력과 같은 이벤트들이 발생하면 그에 따른 처리를 수행하여 클라이언트와 통신을 수행함
결과적으로, 하나의 스레드에서 여러 개의 채널을 관리할 수 있기 때문에 여러 개의 네트워크 연결을 관리할 수 있으며, 더 높은 확장성을 얻게 됨

Last updated on