"호출 시 제어권을 넘겨주냐 마냐"
블로킹(Non-Blocking)
어떤 작업을 요청했을 때, 그 작업이 끝날 때까지 프로그램이 멈추고 기다리는 방식. 대기 중 다른 작업 불가
ex) 파일 읽기 요청을 했을 때, 데이터가 다 읽힐 때까지 CPU가 기다림.
논블로킹(Non-Blocking)
작업을 요청하면 즉시 제어권을 반환하고 다른 일을 할 수 있는 방식, 결과는 나중에 확인하거나 이벤트/콜백으로 발생
ex) 파일 읽기 요청을 해두고, 데이터가 준비되면 알림(콜백, 이벤트 루프)으로 결과를 받음.
카페에서 커피 주문 후, 커피가 나올 때까지 카운터 앞에서 서서 기다리는 것. (=블로킹)
커피 주문 후, 진동벨을 받고 자리에 앉아 다른 일을 하다가 커피가 준비되면 벨이 울려 찾으러 가는 것. (=논블로킹)
비교
| 구분 | 블로킹 (Blocking) | 논블로킹 (Non-Blocking) |
| 동작 방식 | 작업이 끝날 때까지 대기 | 요청 즉시 반환, 다른 일 가능 |
| CPU 활용 | 대기 시간 동안 놀게 됨 | 대기 시간 동안 다른 작업 수행 |
| 구현 난이도 | 단순 | 복잡 (콜백, 이벤트 루프 필요) |
| 적합한 경우 | 작은 규모, 직관적 코드 | 대규모 동시성, 네트워크 서버 |
'CS 정리' 카테고리의 다른 글
| 논동기와 비블로킹 (1) | 2025.09.05 |
|---|---|
| 동기(Synchronous) & 비동기(Asynchronous) (0) | 2025.09.03 |
| Feign 사용해보기 (1) | 2025.08.11 |
| Java + Kotlin 혼용 개발 (0) | 2025.07.31 |
| BunkerWeb, 도입 시 겪은 이슈: HTTP/2 프로토콜 (0) | 2025.07.29 |