1. NIO 단일 스레드
1️⃣ NIO 단일 스레드란?
NIO(Non-blocking I/O) 기반 서버가 단일 스레드로 여러 연결을 처리하는 구조를 말함.
2️⃣ 전통 방식 (Blocking I/O)와 비교
1) Blocking I/O (BIO)
- 요청 하나당 스레드 하나
- 동기 + 블로킹 방식
- 클라이언트가 많아질수록 스레드가 폭증 → 메모리/컨텍스트 스위칭 부담
1000 커넥션 → 1000 thread 필요 ❌2) NIO 기반 단일 스레드 모델
- 한 개의 스레드가 여러 클라이언트를 관리
- Non-blocking + event-driven
- 요청 처리가 필요한 순간에만 작업 수행
1000 커넥션 → 1 thread(또는 소수의 thread)로 관리 가능 ✔️3️⃣ 핵심 기술 요소
1) Selector
- 여러 채널(SocketChannel 등)을 감시하는 객체
- 이벤트 발생 여부를 조사 → 연결/읽기/쓰기 가능 상태 판단
2) Channel
- 소켓/파일 같은 I/O 통로
- Non-blocking 가능
3) Buffer
- 데이터를 읽고 쓰는 저장 공간
- ByteBuffer가 대표적
4) 단일 스레드 이벤트 루프
- Selector가 이벤트를 감지
- 스레드가 이벤트를 하나씩 처리
- 이벤트 없으면 idle
4️⃣ 동작 흐름 예시
- 서버가 Selector를 생성하고 스레드 1개 실행
- 여러 클라이언트 연결을 Channel로 등록
- 스레드는 Selector.select() 호출 (블로킹)
- 데이터가 준비된 Channel만 select 결과로 반환
- 스레드가 준비된 Channel만 처리
- 다시 select()로 대기
➡️ 스레드 낭비 없음
➡️ 이벤트 기반으로 효율적인 처리
5️⃣ NIO 단일 스레드의 장점
1) 적은 스레드로 많은 연결 처리
- 스레드 풀 과도 생성 방지
2) 문맥 전환(Context switch) 비용 감소
- CPU 낭비 줄어듦
3) 고성능 네트워크 서버 구현에 적합
- Netty, Undertow, Jetty 등이 이 모델 기반
6️⃣ NIO 단일 스레드의 단점
1) 코드 구조 복잡
- 상태 관리 필요
- callback 구조 or event loop 패턴
2) CPU 집중 작업에는 불리
- 단일 스레드가 막히면 전체 처리 지연
➡️ 해결: Worker Thread Pool과 함께 사용
7️⃣ 필기 정리

Share article