본문 바로가기

emotional developer/detect-Web

Synchronous, Asynchronous, Blocking, Non-Blocking

Synchronous vs Asynchronous

  • 동기와 비동기를 구준하는 주요 기준은 작업순서의 보장 여부

Synchronous(동기화)

  • 작업의 순서가 보장됨. Thread는 요청한 작업의 결과를 받고 다음 작업 진행
  • 특정 API의 응답 반환 시간이 n분 소요 된다고 하면 이 요청이 실행 되는 n분 동안 Process/Thread는 다른 작업을 하지 못하고, 응답이 반환 되기를 기다려야 한다.
  • 장점 : 설계가 간단하고 직관적이다.
  • 단점 : 요청에 대한 결과가 반환되기 전까지 대기해야 한다.

Asynchronous(비동기화)

  • 작업의 순서가 보장 되지 않음. Thread는 요청한 작업의 결과를 받지 않고 다음 작업 진행
  • 특정 API를 실행 하는데 시간이 n분 소요 되어도 그 시간동안 다른 작업을 수행할 수 있다.
  • 장점 : 요청에 대한 결과가 반환되기 전에 다른 작업을 수행할 수 있어서 자원을 효율적으로 사용할 수 있다.
  • 단점 : 동기 방식보다 설계가 복잡하고, 논증적이다.

Asynchronous 구현 방식

  1. Thread : 기본 구현 방식
  2. Future : 요청 작업 비동기로 결과 반환
  3. Completable Future : 의존성 있는 비동기 작업 처리
  4. Spring Async Task : Spring Async Threadpool 내에서 Thread 처리

Blocking vs Non-Blocking

  • 블럭킹과 논블럭킹을 구분하는 주요기준은 제어권의 양도 시점

Blocking

  • 특정 함수(A)가 다른 함수(B)를 호출할 때, 호출한 함수(B)에게 제어권을 양도 → 함수 A는 제어권을 상실함으로써 일시적으로 작업을 멈춤
  • Process는 요청한 작업이 종료 될 때 까지 waiting

Non-Blocking

  • 특정 함수(A)가 다른 함수(B)를 호출할 때, 호출한 함수(B)에게 제어권을 양도 하지 않음
  • Process는 요청한 작업이 끝나지 않더 라도 작업을 진행 할 수 있음
반응형

'emotional developer > detect-Web' 카테고리의 다른 글

Spring Actuator Health Probe  (0) 2023.07.31
API Design Practice  (0) 2023.05.15
mysql 버전업 이슈.  (0) 2017.11.21