본문 바로가기
역량 UP!/Architecture

Blocking&non-Blocking 그리고 Sync&Async 이해하기!

by 태하팍 2025. 11. 3.
반응형

개념을 쉽게 이해해보자!

밥 아저씨!! ㅠ


Blocking과 Non-Blocking

CPU / 쓰레드 레벨의 개념

Sync와  Async

Application(메소드 호출 흐름) 개념


Blocking / Non-Blocking =  쓰레드와 CPU의 관계

  • Blocking
    • I/O 작업(Disk, Network)을 기다리는 동안 쓰레드가 멈춤
    • CPU가 놀고 있음(idle 상태)
    • CPU를 낭비! 일해야하는데 일하지 않고 놈!
  • Non-Blocking
    • I/O 요청 후 즉시 리턴, 나중에 완료되면 알려줌
      • 나중에 누가??
        • 하드웨어 I/O는 OS커널이 감지하고 알려줌
        • 어플리케이션 레벨은 EventLoop or ThreadPool이 Callback을 실행하며 알려 줌
          • 이것때문에 특징을 헷깔릴 수 있음주의!
            • Non-Blocking + Async(Callbak) 조합!
    • CPU가 다른 작업 처리 가능
    • Polling 방식(직접확인)  

 Sync / Async = 메소드 실행 흐름(로직 레벨)

  • Synchronous
    • 앞의 작업이 끝나야 다음 작업 진행
    • 순서가 있음
  • Asynchronous
    • 작업을 백그라운드에 던져 좋고 다른 일 진행
    • 결과는 나중에 받음(=Callback / Future 기반) 

개념은 분리되지만  보통 조합해서 사용하기 때문에 헷깔림!

Non-Blocking, Async등 개념 학습하다보면 보통 조합을 해서 사용하기 때문에 더 이해하기 어려울수 있음.
나눠서 생각하지 말고 묶어서 생각하자!
특히 첫번째와 마지막 패턴을 눈여겨보자!

4가지 패턴으로 구분

패턴 설명 효율 비고
Blocking + Sync 요청하고 결과 나올때까지 기다림 낮음 Spring MVC+JDBC
Blocking + Async 요청은 Blocking이지만 결과는 콜백으로 받음
(TreadPoll에서 작업)
비효율 Future.get(), @Async+Blocking DB
Non-Blocking + Sync 요청하면 바로 리턴하지만 결과는 직접 계속 체크(Polling 방식) CPU낭비  
Non-Blocking + Async 요청은 바로 리턴, 완료되면 콜백/이벤트로 알려줌 최고 효율! Redis, Netty, WebFlux, Akka

마지막으로 정리하면
Async나 Sync의 메소드 흐름속에 Blocking, Non-Blocking이 들어가는건가? 등 헷깔릴수 있음!
Blocking/Non-Blocking은 그냥 요청할 때의 동작 방식(I/O 요청 시 쓰레드가 기다리냐 안기다리냐)
Sync/Async는 응답을 받을 때의 방식(=응답을 기다렸다가 받냐, 콜백으로 받냐)

Redis, Akka, WebFlux, Netty 등이 가장 많이 사용되고 있는 4번째 패턴이니 염두해보고 학습을 하게 된다면 좀 더 이해가 됩니다.

참고:

2025.10.28 - [OpenSource/Redis] - Redis Single Thread, 싱글인데 왜 빠르지??

2025.09.04 - [Data Platform/Akka] - Akka Classic ask Flow(Future/Promise)+ Distributed Data(feat. CRDT)


 

 

 

 

반응형