NIO
NIO란?
(Non-Blocking) New Input Output 의 약어로, 기존 IO 패키지를 개선하기 위해 나온 New IO 패키지이다.
Data Read Process
Channel은 버퍼에 저장된 데이터를 출력하고, 입력된 데이터를 버퍼에 저장한다. NIO는 이 버퍼에 저장된 데이터의 위치를 이동하면서 읽고 쓸 수 있다.
Channel
Channel은 소켓을 통해 non-blocking read를 할 수 있도록 지원하는 일종의 connection이다. 양 방향으로 읽기 및 쓰기 기능을 지원하며, Native IO 와 Scatter/Gather 구현으로 효율적인 IO를 지원한다.
Buffer
Buffer는 Channel에 의해 read, write 되는 객체를 의미한다.
Scattering / Gathering
I/O 시스템 호출을 할 때 여러 개의 메모리 버퍼를 지정할 수 있는 방식으로, 여러개의 버퍼를 사용하여 한번의 시스템 콜로 읽거나 쓰는 방법중 하나이다.
Selector
단일 스레드로 여러 채널을 Handling 할 수 있도록 해주는 컴포넌트이다. 기존에 클라이언트 하나당 스레드 하나를 생성해 처리하는 방식은 스레드가 많이 생성될 수록 급격한 성능저하를 가졌던데 반해 Selector는 여러 채널 중에서 이벤트가 준비 완료된 채널을 선택하는 방법 제공한다.
Selection Key
Selector와 Channel 간의 관계를 표현해주는 객체로 Channel을 Selector에 등록하면 반환된다. Reactor는 이 Key를 이용하여 채널에서 발생하는 I/O 이벤트로 수행할 작업을 선택한다.
댓글남기기