동기,비동기/block,non-block

minus·2022년 12월 14일
0

동기,비동기와 block,non-block를 명확하게 구분
두 개념은 관점의 차이로 볼 수 있음

  • 동기, 비동기는 "처리시점"의 관점
  • block, non-block은 "실행 주도권"의 관점

동기(synchronous)와 비동기(asynchronous)

  • 동기로 실행되는 함수는 함수의 처리의 완료될 때까지 기다렸다가 직접 처리해줌

  • 비동기로 실행되는 함수는 함수의 처리가 완료될 때까지 기다리지 않고 함수를 종료 -> 함수 처리 결과는 callback 함수에 의해 처리완료 시점에 간접적으로 처리해줌

blocking, non-blocking

blocking은 A라는 함수가 다른 함수 B를 호출할 때 A가 실행 주도권을 유지하는지 안하는지에 따라 결정됨

예를 들어 A 함수 실행 중 B 함수를 호출했을 때,

  • A 함수가 B 함수의 실행과 별개로 계속 수행된다면 이것은 B 함수가 non-block 함수이고, B 수행이 완료될 때까지 A 함수의 수행이 멈춘다면 B 함수는 block 함수임

동기, block이 함께 사용될 때

  • javascript ajax 호출의 경우 비동기, non-blocking의 예제로 볼 수 있음 => ajax 호출 결과에 대해 callback을 등록해 처리(비동기 호출), ajax를 호출한 함수가 ajax 요청이 응답을 받을 때까지 기다리지 않고 다른 작업을 수행함(non-blocking)

  • Spring WebFlux
    서블릿 기반 Spring MVC에서는 클라이언트 request 당 스레드를 1개씩 부여해 처리함. 따라서 웹서버(스프링에서 하는건가?)에서 설정한 스레드풀을 넘어서는 요청이 들어올 경우 요청 처리속도가 급격하게 느려짐 =>
    ==> WebFlux(반응형) 프레임워크에서는 Spring MVC보다 적은 수의 스레드로 요청을 처리함. 하지만 대규모 요청을 받아들이는 서비스에서 Spring MVC보다 높은 처리속도를 보여주는데 Spring이 API 요청이나 I/O 요청을 동기요청으로 처리하는 반면 WebFlux는 이를 비동기 요청으로 처리해 해당 task가 처리될 때까지 기다리지 않고 다른 요청을 처리할 수 있기 때문임.

profile
안녕하세요

0개의 댓글