studybook
  • Introduction
  • 실무 하며 깨닫는 부분 정리
    • 옵션에 대해서
    • 코드 작성의 순서
    • 자바 프로그램에 문제가 생겼다면
    • 장애 대처법
  • Logstash, Beats 정리
  • Zookeeper 정리
  • Message Queue 정리
    • RabbitMQ 삽질
  • Java 관련 정리
    • Java Primitive Wrapper class
    • Java NIO
    • Java8 Double colon operator
    • Effective Java
      • 4장
      • 5장
      • 6장 - Enum, Annotation
      • 7장 - Method
      • 8장 - 프로그래밍 일반
      • 9장 - Exception
    • Java8 Lambda expression
    • JDBC
    • Linux에서 WatchService 이상동작
  • Spring 관련 정리
    • Spring Bean init, destroy 순서
    • Spring Async Controller
    • Spring Executable jar 웹 개발 및 배포
    • Spring Boot Font 배포 에러
    • Spring AOP
      • Spring AOP로 모든 Request 로그 남기기
    • Spring Cache
    • Spring Cloud
      • Consul로 spring 설정 관리하기
    • Spring Test
      • Spring Test DirtiesContext
      • Spring Test MockBean, SpyBean
      • Spring Test Dynamic @Scheduled
    • Spring JDBC
    • Spring Validation
    • Spring Transaction Management
      • Spring with JTA 삽질
    • Spring에서 효율적으로 Static resource 관리하기
    • Zuul을 사용해서 Spring Reverse proxy 만들기
    • Spring Security
    • 스프링 어노테이션이 안 먹힐 때 의심해볼만한 것
    • Spring Data
    • Spring Webflux
      • Tobi 강연
  • 코드 리팩토링
    • 한번에 하나씩
  • 지속적 통합 (CI)
    • Jenkins pipeline 삽질기
  • Log Aggregator 정리
    • Flume 테스트
    • Fluentd 테스트
  • Web Socket 정리
  • Akka
    • Actor 모델
    • Supervision
  • IE 8 대응 정리
  • 함수형 프로그래밍
    • 모나드
  • Netty
    • Netty 기본 예제
    • Netty 주요 특징
    • Netty 부트스트랩
    • Netty 채널 파이프라인, 코덱
    • Netty 이벤트 모델
    • Netty 바이트 버퍼
  • 스칼라 관련 정리
    • Maven으로 컴파일하기
    • Scala def 괄호 여부의 차이
    • 스칼라 function, method 차이점
    • ScalaTest와 Spring 연동하기
    • Programming in Scala
  • J2S 컨퍼런스
  • Android
    • 테스트
    • NDK
  • DDOS
  • HTTP
  • HttpClient
  • Container
    • Image 개요
    • cri-o
    • kata containers
    • Open Container Initiative Image
    • Buildkit
  • Github pages
  • Static Website
  • Webhook
  • Service Discovery Tools
    • Etcd
    • Eureka
    • Consul
      • ACL
    • 비교
  • React
    • JSX
    • React Element
    • Components, Props
    • State, Lifecycle
    • Handling Event
    • Flux
  • Vagrant
    • SSH 접속
  • Linux
    • Systemd
    • Alternatives
  • Messaging protocols
    • XMPP
    • AMQP
  • Windows
    • Windows10 내장 우분투에 ssh 클라이언트로 접속하기
    • Windows10 Hyper-V와 Virtual Box가 충돌을 일으켰을 때
    • Hyper-V 기반 docker에서 Shared Drives 설정 실패할 때
    • 윈도우 개발환경 설정
    • Docker desktop 없이 docker 환경 세팅하기
    • UWP 앱을 항상 관리자권한으로 실행하는 바로가기 만들기
  • Spring camp 2017
    • Project Reactive
    • 이벤트 소싱
    • CQRS
  • Spring webflux
  • 리액티브 프로그래밍
  • Linux Settings
    • 홈서버 백업 및 복구기
    • 홈서버 트러블슈팅
  • Kubernetes
    • k3s 설치 및 삽질
    • pod resources
    • Argo workflow
    • 트러블 슈팅
      • Kubernetes namespace의 phase가 Terminating에서 멈춰있을 때
    • 쿠버네티스 마스터
    • Knative
    • Knative Pipeline
    • Aggrerated API server
    • Accessing the API
      • Authenticating
  • Sonarqube
  • HTTP/2
  • Go
    • Go Module
    • Go dependency injection
    • Go Error handling
    • Go in Action
      • 3장 패키지
      • 4장 배열, 슬라이스, 맵
      • 5장 GO의 타입 시스템
      • 6장 동시성
      • 7장 동시성 패턴
      • 8장 표준 라이브러리
      • 9장 테스트와 벤치마킹
    • Go Channel 사용법
  • Cloud Native
Powered by GitBook
On this page
  • 이벤트 루프
  • 이벤트 처리 방식
  • 네티의 이벤트 루프
  • 특징
  • 네티의 비동기 I/O 처리
  • Future 패턴
  1. Netty

Netty 이벤트 모델

  • 네티는 event loop 기반 프레임워크

  • single thread event loop 기반 프레임워크 : node.js

  • multi thread event loop 기반 프레임워크 : Netty, Vert.x

이벤트 루프

이벤트 처리 방식

  1. Event listener + Event handle thread

    1. UI 처리 프레임워크에서 보통 사용

  2. Event queue + Event loop

    1. 프레임워크의 구현 복잡해짐

    2. Event queue는 다수의 thread에서 공유됨

    3. Thread 종류에 따라 multi thread event loop, single thread event loop로 나누어짐

    4. 결과를 돌려주는 방식에 따라 Callback 패턴과 Future 패턴으로 나누어짐

Single Thread Event Loop vs Multi Thread Event Loop

Single Thread Event Loop 1. event handle thread가 1개 2. event loop 구현 간단. 예측 가능한 동작 수행 3. event 발생 순서에 따라 처리 4. 작업 수행 시간이 길어질 수 있음

Multi Thread Event Loop 1. event handle thread 여러 개 2. event 발생 순서와 작업 수행 순서가 일치하지 않음 3. multi core CPU 효율적으로 사용 4. 작업 수행 시간이 상대적으로 짧아짐 5. Thread 갯수가 지나치게 많아지면 문제 발생 6. OOM 에러 발생 7. 과도한 GC 유발 8. Context switching 비용

  • 하나의 core는 한번에 한 thread만 실행 가능

  • Thread의 상태 Run, Waiting, Ready, Sleep, Blocked 중 Waiting, Sleep, Blocked 상태인 Thread를 골라 실행하는데 이 때, thread가 가지고 있는 stack 정보를 core의 register로 복사하는 비용 발생

    1. thread 경합

  • 여러 thread 간 공유되는 자원이 있을 때, 단일 접근 권한을 얻기 위해서 thread 끼리 경쟁이 일어나며 여기에 CPU 자원 사용

네티의 이벤트 루프

특징

  1. 네티의 이벤트는 채널에서 발생

  2. 이벤트 루프 객체는 각각 이벤트 큐를 가짐

  3. 네티의 채널은 하나의 이벤트 루프에 등록됨

    • => 이벤트 발생 순서와 수행 순서의 불일치에서 오는 부작용 경감

  4. 이벤트 처리를 위해 SingleThreadEventExecutor 사용

네티의 비동기 I/O 처리

Future 패턴

  • Pure Java의 Future에 Listener을 등록할 수 있는 기능이 추가된 netty의 ChannelFuture 인터페이스 사용

  • ChannelFutureListener 구현하여 이벤트 핸들링 가능

  • 기본 ChannelFutureListener 제공

    • ChannelFutureListener.CLOSE

    • ChannelFutureListener.CLOSE_ON_FAILURE

    • ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE

PreviousNetty 채널 파이프라인, 코덱NextNetty 바이트 버퍼

Last updated 7 years ago