태그 보관물: NIO

자바(Java) NIO Scatter/Gater

자바(Java)도 NIO 패키지에서 채널(Channel)을 사용해서 버퍼(Buffer) Scatter/Gater를 지원하고 있다. 지금 하고 있는 프로젝트에서 서버와 클라이언트가 주고 받는 패킷의 형태가 Header + Body의 구조이고, 매번 단일(Single) 버퍼에 입력(put)하고 전송(send)하고 있고, 받을 때도 역시, 똑같이 하고 있다. 이 구조를 NIO의 Scatter/Gater의 형태로 바꾸면, 코드가 매우 깔끔해진다.

* 읽기(Read)

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = { header, body };
channel.read(buffers);

* 쓰기(Write)

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body   = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = { header, body };
channel.write(buffers);

이상 간단한 Scatter/Gater의 사용방법에 대해서 알아봤다.

* Reference
http://tutorials.jenkov.com/java-nio/scatter-gather.html

Scalable IO in Java

Doug Lea 교수님께서 강의를 위해서 만들어놓은 자료입니다. 어디에서 다운로드를 받았는지 기억이 안나서 업로드 합니다.
PDF 자료를 보면, POSA2의 Reactor 패턴을 이용해서 이벤트를 디스패칭하는 내용을 기본으로, 약 3가지의 모델을 제시하고 있고, 그 중에서 Using Multiple Reactors 슬라이드 편이 멀티 프로세서 환경에서, 성능이 가장 좋아 보인다.

nio.pdf