web

[WEB] 블로킹/논블로킹 and 동기 / 비동기

뽀리님 2023. 11. 23. 13:58

 

Blocking / Non-blocking

Blocking방식은 요청하고 응답 올때까지 기다리는 방식이고, Non-Blocking방식은 요청하고 딴일하다 나중에 응답신호가 오면 결과를 읽어 처리하는 방식

 

 

Synchronous / Asynchronous

동시에 발생하는 것들(always plural, can never be singular).
동시라는 것은 즉, 시(time)라는 단일계(system)에서 같이함께 무언가가 이루어지는 두 개 이상의 개체 혹은 이벤트를 의미한다고 볼 수 있겠습니다.

 

본격 Case Study

대표님, 개발자 좀 더 뽑아주세요..

Blocking & Synchronous

나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 오케이, 잠깐만 거기 계세요!
나 : …?!!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : (과정 지켜봄.. 궁금함.. 어차피 내 일 하러는 못 가고 계속 서 있음)

Blocking & Asynchronous

나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 오케이, 잠깐만 거기 계세요!
나 : …?!!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : (안 궁금함.. 지나가는 말로 여쭈었는데 붙잡혀버림.. 딴 생각.. 못 가고 계속 서 있음)

Non-blocking & Synchronous

나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 알겠습니다. 가서 볼 일 보세요.
나 : 넵!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : 채용하셨나요?
대표님 : 아직요.
나 : 채용하셨나요?
대표님 : 아직요.
나 : 채용하셨나요?
대표님 : 아직요~!!!!!!

Non-blocking & Asynchronous

나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 알겠습니다. 가서 볼 일 보세요.
나 : 넵!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : (열일중..)
대표님 : 한 분 모시기로 했습니다~!
나 : 😍

 

  • 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않으면 Block (ex. 내가 대표님을 호출했지만 대표님이 기다리라고 한 상황)
  • 호출된 함수가 자신이  일을  마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수가 다른 일을 진행할  있도록 해주면 Non-block (ex. 대표님이 나보고 볼 일보라고함)
  • 호출된 함수의 수행 결과 및 종료를 호출한 함수가(호출된 함수뿐 아니라 호출한 함수도 함께) 신경 쓰면 Synchronous (ex. 내가 계속 채용과정을 옆에서 지켜보고 있음)
  • 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경 쓰고 처리한다면(as a callback fn.) Asynchronous (ex.  대표님이 알아서 뽑아주심)

 

 

 

동기방식(sync)은 요청자와 제공자사이에 계속 Connection이 맺어져 있어야 하고, 비동기방식(async)은 Connection은 끊어지고 서로간에 이벤트를 통해 통신하는 방식이다.

 

비동기방식(async)은 요청자와 제공자 사이에 Message Broker라는 또 다른 서비스가 중계해주지만, 동기 방식은 요청자 어플리케이션에 non-blocking처리를 하는 로직이 있다.

최근 흔히 사용하는 REST API동기(sync) 방식이고 보통 Non-Blocking방식으로 통신한다(Feat. WebClient)

Frontend backend사이는 거의 대부분 동기+non-blocking 방식으로 구현한다고 함

 

참조

https://musma.github.io/2019/04/17/blocking-and-synchronous.html

https://happycloud-lee.tistory.com/154