Akashic Records

자바 nio - 8 본문

오래된글/Java

자바 nio - 8

Andrew's Akashic Records 2018. 4. 9. 11:29
728x90

8. java.nio.channels 패키지 소개

nio 패키지는 기존의 io패키지와는 달리 nonblocking을 지원해 준다. 이런 입출력의 nonblocking은 서버와 클라이언트간의 스레드의 과부하를 덜어주고 높은 성능과 효율성을 가진다. 이런 기능에서 중요한 역활을 하는 것이 SelectableChannel과 Selector 클래스이다. 우선 channels패키지의 전체 흐름을 보자.

java.nio.channels 패키지에는 총 7개의 인터페이스와 이른 구현하는 13개의 클래스로 구성이 되어있다, 인터페이스와 클래스관계가 좀 복잡해 보이지만 중요한 것들만 기억하면 된다. 이들은 다음장에서 구체적으로 살펴본다.


1. 채널(channel)이란?

채널은 한마디로 서버와 클라이언트간의 통신수단을 나타낸다. 좀더 깊이 있게 본다면 하드웨어 장비, 파일 ,네트워크 소켓, 혹은 프로그램 컴포넌트와 같이 읽기나 쓰기등 한 개 이상의 뚜렷한 입출력 작업을 수행할 수 있는 개방된 연결을 나타낸다.


2. 채널의 역활

채널은 비동기적으로 닫히고 중단(interrupt)될 수 있다. 따라서 한 스레드가 한 채널에서 하나의 입출력 작업으로 블록화하면 다른 스레드가 그 채널을 닫을 수도 있다. 비슷하게 한 스레드가 한 채널의 입출력 작업으로 블록화되면 다른 스레드가 블룩화된 스레드를 중단시킬 수 있다. 그래서 파일입출력에서 블록화된 스레드를 언제든지 중지시킬 수 있게 되었으며, 이를 이용해서 네트워크에서 non-blocking 입출력이 가능해졌다.


3. 채널의 특징

  1. 읽기 쓰기를 동시에 할 수 있다.

  2. Buffer 클래스를 사용하므로 데이터형에 맞는, 전용 메모리 공간을 가지고 있다.

  3. 블로킹된 스레드를 깨우거나 중단시킬수 있다.


nio의 non-blocking 입출력 메카니즘

nio의 non-blocking 입출력 메카니즘은 selectors와 channels를 근간으로 구축되었다, channel 클래스는 서버와 클라이언트간의 통신 메커니즘을 나타내고 selector 클래스는 클라이언트로부터 들어오는 클라이언트 요청을 나누어 각 요청에 해당하는 각각의 처리자에게 이들을 보낸다. Channel 클래스와 Selector 클래스의 각각의 기능과 이들이 협력하여 자바 플랫폼에 대한 nonblocking 입출력 메커니즘을 생성한다. 이둘 관계를 간단하게 그림으로 나타낸다면 다음과 같다.


아직은 뭔지 감이 오지 않을 것이다. 당연하다. 다급해 하지말고 이제부터 시작해 보자.



728x90

'오래된글 > Java' 카테고리의 다른 글

자바 nio - 10  (0) 2018.04.09
자바 nio - 9  (0) 2018.04.09
자바 nio - 7  (0) 2018.04.09
자바 nio - 6  (0) 2018.04.09
자바 nio - 5  (0) 2018.04.09
Comments