Blocking vs Non-Blocking과 Synchronous vs Asynchronous 확실히 알기

JINNI·2025년 5월 8일

동시성, 병렬성, 네트워크 프로그래밍 시 너무너무 중요한 개념인 블로킹/논블로킹, 싱크/에이싱크에 대해서 알아보자.

1. Blocking vs Non-Blocking

BlockingNon-Blocking함수 호출의 반환 방식(제어권)에 대한 개념

스레드의 상태라고 생각

  • Blocking: 함수 호출 결과가 올 때까지 기다리는 방식. 해당 작업이 끝나기 전까지 다른 작업을 하지 못함.
  • Non-Blocking: 함수 호출 시 결과가 곧바로 반환되고, 결과를 기다리지 않고 다른 작업을 진행. 작업 완료 여부는 별도로 확인하거나, 콜백 등을 통해 처리.

기다리냐 마느냐의 차이

2. Synchronous vs Asynchronous

SynchronousAsynchronous작업의 순서흐름 제어 방식에 대한 개념

코드 흐름의 방식이라고 생각

  • Synchronous: 순차적으로 작업을 수행. 앞선 작업이 완료되어야 다음 작업으로 넘어감.
  • Asynchronous: 요청만 보내고, 작업이 끝나기를 기다리지 않으며, 나중에 응답을 받으면 그때 처리.

순차적으로 처리하냐, 병렬적으로 처리하냐의 차이


✅ 4가지 조합

구분설명
Blocking + Synchronous요청을 보내고, 작업이 끝날 때까지 기다림. 응답을 받아야 다음 작업 진행.
Blocking + Asynchronous요청은 비동기로 보내지만, 결과를 받을 때까지 블로킹되어 다른 작업을 하지 못함. 흔하지 않음.
Non-Blocking + Synchronous결과를 기다리지는 않지만, 응답을 받아야 다음 작업을 수행.
Non-Blocking + Asynchronous요청을 보내고 기다리지 않으며, 결과는 나중에 콜백, 이벤트, Future, Promise 등으로 처리. 성능과 응답성이 중요한 시스템에서 많이 사용됨.

✅ 예시

Blocking & Synchronous

친구에게 전화를 건다.
친구가 받을 때까지 기다린다.
친구와 통화가 끝난 후 청소(다른 일)를 시작한다.

Blocking & Asynchronous

→ 현실에서 잘 쓰이지 않음.

친구한테 카톡을 보낸다.
답장이 올 때까지 멍하니 있는다. (언제 답장이 올 지는 궁금하지 않음!)
답장이 오고 나면 청소(다른 일)을 시작한다.

Non-Blocking & Synchronous

→ 현실 세계에서 표현하기 어려운 예시. 잘 사용되지 않음.

친구한테 카톡을 보낸다.
답장이 없다.
기다린다..
답장이 없다.
기다린다..
답장이 올 때까지 다음 일을 하지 못한다!

Non-Blocking & Asynchronous

친구한테 카톡을 보낸다.
청소를 한다.
답장 알림(콜백)이 왔다!


✅ 장단점

  • Blocking 방식은 코드가 직관적이지만, 성능이 중요한 서버에서는 자원 낭비가 심해질 수 있음!
  • Non-Blocking 방식은 성능과 확장성에 유리하지만, 복잡한 흐름 제어가 필요함.
  • Asynchronous 방식은 네트워크 요청이나 파일 IO, 사용자 입력 등 느린 작업에서 효율적임.

✅ 최종 정리!

구분의미
Blocking작업이 끝날 때까지 대기
Non-Blocking작업 완료를 기다리지 않음
Synchronous응답을 받아야 다음 작업 진행
Asynchronous응답 없이도 다음 작업 진행 가능, 응답은 나중에 처리
profile
천재 개발자 되기

0개의 댓글