공통적인 상황으로 함수A가 함수B를 호출했다고 가정한다.
블록킹 (Blocking)
블록킹은 특정한 로직을 실행시켰을때 응답을 기다리는 것을 뜻한다.
예를 들어, B가 실행되는 동안 A는 대기상태에 있다면 블록킹이다.
논블록킹 (NonBlocking)
논블록킹은 특정한 로직을 실행시켰을때 응답을 기다리지 않는다.
예를 들어, B가 실행되는 동안 A는 대기상태에 있지 않고 다른 작업을 수행하면 논블록킹이다.
대기 상태에 있지 않도 다른작업을 수행해야 하기때문에 멀티 쓰레드 환경에서는 별도의 쓰레드에서 실행된다.
동기 (Synchronous)
동기는 블록킹과 유사하지만 응답값을 신경쓴다는 개념이 추가된다.
블록킹은 단순히 대기 상태와 관련이 있다면 동기는 '어떤식으로 응답을 주는가?' 까지 포함된 개념이다.
비동기 (Asynchronous)
비동기 또한 논블록킹과 유사하지만 응답값을 신경쓴다.
B의 실행이 완료되었을 때, 콜백함수를 통해 B의 응답값을 처리한다.
동기 블록킹
요청부터 응답까지 모든 응답이 순차적으로 처리된다.
B가 호출된 시점에서 A는 대기한다.
그리고 B의 작업이 끝났다면 A를 마저 실행시키고 응답을 내보낸다.
동기 논블록킹
이는 특별히 논블록킹으로 실행된 함수의 상태를 지속적으로 체크하고 싶을때 활용된다.
예를 들어, 논블록킹으로 실행한 함수의 실행시간이 오래 걸리고 사용자에게 현재 얼마나 처리되었는지 알려주고 싶을 때 사용한다.
동기 방식이므로 논블록킹으로 실행된 함수가 끝날때까지 다른 작업을 하지 않고 대기하지만 블록킹되었다는건 아니다.
지속적으로 논블록킹이 완료되었는지 확인한다.
비동기 블록킹
비동기 블록킹은 특별한 사용 사례가 있을까 싶을정도로 비효율적인 방식이라고 생각된다.
비동기이므로 호출된 B는 콜백함수를 통해 결과를 처리하는데 블록킹이므로 대기한다.
B가 실행되는동안 A는 블록킹되었으므로 대기하지만 B의 결과값은 콜백함수를 통해 처리한다.
비동기 논블록킹
동기 논블록킹 방식에서 결과값을 지속적으로 확인하지 않는다면 비동기 논블로킹 방식이다.
이때, 비동기 이므로 응답은 콜백함수를 통해 처리한다.
'CS' 카테고리의 다른 글
무중단 배포 3가지 방법 (Rolling, Blue-Green, Canary) (0) | 2024.01.28 |
---|---|
GSLB와 CDN (0) | 2024.01.17 |
쓰레드 특징 (프로세스와 비교) (1) | 2024.01.12 |
ORM, JPA, Spring Data JPA 란 (0) | 2022.06.09 |
DB Index (0) | 2022.05.27 |