새소식

반응형
Development

sync/async, blocking/non-blocking

  • -
반응형

4개의 용어, 개념이 헷갈리는데 

Spring의 WebClient를 쓰기 위해서 개념을 공부하다 보니 정리해두고 싶어졌다.

찾아본 내역들을 다음에 봐도 바로 떠오를 수 있도록 해보자.

 

우선 blocking, non-blocking이 좀 더 직관적으로 이해하기 쉬웠다. 

blocking/non-blocking

제어권의 반환을 기준으로 생각하자

 

blocking - 진행하던 작업에서 다른 작업을 호출하면 제어권이 넘어가 버린다.

제어권이 돌아올 때까지 기다려야 한다. 

 

non-blocking - 진행하던 작업에서 다른 작업을 호출해도 제어권을 넘기지는 않는다.

계속 내가 진행하던 작업을 진행할 수 있다. 

 

sync/async

작업 완료 여부에 관심, 결괏값의 전달 

개념을 이해하는데 도움이 되는지는 모르겠지만,

단어 자체만의 뜻으로는 syn(함께) + chrono(시간) -> 시간을 함께 맞춘다 라는 뜻이라고 한다. 

 

sync - 진행하던 작업에서 다른 작업을 호출하고, 결괏값을 받아 본인이 처리하는 것 

 

async - 진행하던 작업에서 다른 작업을 호출하고, 결괏값은 신경 쓰지 않는다.

보통은 callback을 정의해서 거기서 처리되도록 한다. 

 

webClient

webClient를 사용하면 기존 restTemplate와는 다르게 기존 로직을 수행하던 스레드가 아닌 다른 스레드에서 http 호출을 맡아주니 non-blocking이 가능하다.

 

webClient에서 .block()을 호출하면 기존 로직을 수행하던 스레드가 http 호출도 한다. blocking 

 

retrieve, exchange를 이용해서 결괏값에 대한 처리를 다른 스레드에서 진행하도록 처리할 수 있다. async

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.