Synchronous vs Asynchronous
- 동기와 비동기를 구준하는 주요 기준은 작업순서의 보장 여부
Synchronous(동기화)
- 작업의 순서가 보장됨. Thread는 요청한 작업의 결과를 받고 다음 작업 진행
- 특정 API의 응답 반환 시간이 n분 소요 된다고 하면 이 요청이 실행 되는 n분 동안 Process/Thread는 다른 작업을 하지 못하고, 응답이 반환 되기를 기다려야 한다.
- 장점 : 설계가 간단하고 직관적이다.
- 단점 : 요청에 대한 결과가 반환되기 전까지 대기해야 한다.
Asynchronous(비동기화)
- 작업의 순서가 보장 되지 않음. Thread는 요청한 작업의 결과를 받지 않고 다음 작업 진행
- 특정 API를 실행 하는데 시간이 n분 소요 되어도 그 시간동안 다른 작업을 수행할 수 있다.
- 장점 : 요청에 대한 결과가 반환되기 전에 다른 작업을 수행할 수 있어서 자원을 효율적으로 사용할 수 있다.
- 단점 : 동기 방식보다 설계가 복잡하고, 논증적이다.
Asynchronous 구현 방식
- Thread : 기본 구현 방식
- Future : 요청 작업 비동기로 결과 반환
- Completable Future : 의존성 있는 비동기 작업 처리
- 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 |