개발생활/Framework
Netty Basic Interface / ByteBuf
한국인맛집
2017. 12. 14. 19:29
반응형
Netty의 핵심 Interface
Interface Name |
Explain |
Channel |
Read,Write,connect,bind 등의 I/O 작업을 할수있는 요소 또는 네트워크 연결관련 모든 I/O 작업은 비동기(Asynchronous)->ChannelFuture |
ChanelFuture |
Channel의 I/O작업의 결과를 나타냄 ChannelFutureListner를 등록, 결과에 따른 작업을 진행. |
ChannelHandler |
Netty의 핵심요소. Netty의 I/O 이벤트를 처리해주는 Interface ChannelInboundHandlerAdapter ChannelOutboundHandlerAdapter |
ChannelHandlerContext |
ChannelHandler는 ChannelHandlerContext를 통한다. 다음 ChannelHandler에게 이벤트를 토스가능(Passing) 동적으로 ChannelPipeline을 변경할수있다. |
ChannelPipeline |
Channel에 드나드는 Inbound / Outbound 이벤트처리 Intercepting Filter패턴처리, ChannelHandler리스트 |
EnvetLoop |
등록된 Channel들의 모든 I/O작업을 처리 구현된 NioEventLoopGroup을 주로 사용 |
Netty의 메모리 모델
-ChannelPipeline을 활용한다.
-ChannelInboundHandler
ByteBuf
-Netty에서 사용되는 ByteBuf는 성능적인 측면에서 GC부담을 최소화해준다.
-NIO의 ByteBuffer와 비슷함.
-커스텀타입 개발이 가능합니다.
-복합(Composite)버퍼도입으로 버퍼의 중복복사를 최소화해준다.
-필요에 따라 버퍼의 용량이 유동적으로 증가함.
ReferenceCounted
-별도 메모리풀에서 할당해재
-최초의 참조수(refcnt())는 '1'
- 참조하는 객체가 생길시 retain()호출 ==> refcnt 는 1증가.
- 객체를 다사용할경우 release() 호출 하여 refcnt 는1 감소
- ReferenceCount가 0이될시 메모리 헤제.
Derived Buffer [파생버퍼]
- 파생될때 refcnt는 증가 하지않는다. 그러므로 다른메소드에 파생할땐 retain()이 필요.
”파생 : 사물이 어떤 근원으로부터갈려 나와생김
반응형