netty 공부

sangeun·2022년 10월 4일

netty는 어떻게 동작하는가?

Bootstrap에서 bossGroup과 workerGroup을 받는다. 둘다 eventLoop이고 자체 selector를 가지고 있다. bossGroup은

BootStrap

네트워크 레이어를 구성하는 컨테이너. bossGroup과 workerGroup을 받는다.
생성자가 빌더패턴으로 되어있음

EventLoop

  • NioEventLoop = socketChannel + selector

작동순서

  • BossNioEventLoop에서
    accept event, client와 커넥션 맺기 -> socketChannel 생성 -> socketChannel이랑 selector를 nioEventLooop에다가 등록하기. -> runAllTask
  • worker NioEventLoop 스레드에서
    socketChannel에서 event를 poll해와서 selector에다가 등록 -> 커넥션이 맺어지면 read write 기능 처리 -> runAllTasks

등록 순서

channel -> selector -> eventLoop

질문

  • eventLoop는 왜 group별로 나누어져있는가?
    여러 개의 eventLoop를 묶은 이유?

  • nioEventLoop는 selector를 가지고 있고, selector에다가 socketChannel을 등록한다고 하는데 대체 socketChannel은 어디있는가?

selector

IO multiplexing에 사용

  • IO multiplexing이란?
    가장 자주 쓰이는 모델로, 싱글 스레드에서 listen과 블록을 여러 리소스들에 대해 동시에 진행한다 (polling -cpu 자원 낭비- 또는 멀티스레딩을 한다는 의미는 아님) 그리고 하나라도 자원이 준비되면 리턴한다.

  • netty에서는 selector도 선택 가능

    java 시스템변수로 지정 가능
    selector 커스텀을 고민해볼 수도 있을까?
    디폴트는 KQueueSelectorImpl ( for mac os)

코드 보고

NioEventLoopGroup

EventExecutor은 interface인데??

profile
꾸준히

0개의 댓글