TIL | #3 Sync vs Async, Blocking vs Non-Blocking

trevor1107·2021년 2월 16일
0

2021-02-16(화)
이해를 돕기위한 영상 - 우아한 Tech
이해를 돕기위한 자료 - siyoon210, PaperCraft, homoefficio

동기(Synchronous) vs 비동기(Asynchronous)

작업 완료 여부를 누가 신경쓰는지에 대한 기준으로 나뉜다.
처리해야 할 작업들을 어떠한 흐름으로 처리할 것인가에 대한 구분

동기(Sync)

  • 작업 요청을 했을 때, 요청의 결과 값을 직접 받는다.
  • 요청의 결과 값이 반환 값과 같다.
  • 반환을 받더라도 호출한 함수가 계속해서 작업완료 여부를 신경쓴다.

호출된 함수(노동자)의 결과를 호출한 함수(주인)이 신경써야 한다.

비동기(Async)

  • 작업 요청을 했을 때, 요청의 결과 값을 간접적으로 받는다.
  • 요청의 결과 값이 반환 값과 다를 수 있다.
  • 응답을 기다리지 않고 바로 다음 작업을 수행한다.
  • callback 함수가 작업 완료를 신경쓴다.

호출된 함수(노동자)의 결과를 호출한 함수(주인)이 신경을 쓰지 않아도 된다


블로킹(Blocking) vs 논-블로킹(Non-Blocking)

제어할 수 없는 대상의 처리방법. 제어권을 바로 반환 하느냐 안하느냐의 기준으로 나뉜다.
처리되어야 하는 작업이 전체적인 작업의 흐름을 막느냐 안막느냐에 대한 구분

블로킹(Blocking)

  • 결과 값을 즉시 반환한다.
  • 요청한 작업을 마칠 때 까지 계속 대기한다.
  • 결과 값을 받아야 대기가 끝난다.(제어권과 결과값을 같이 반환)

호출된 함수(노동자)가 호출한 함수(주인)에게 즉시 제어권을 반환하지 않는다.

논-블로킹(Non-Blocking)

  • 결과 값을 즉시 반환하지 않는다.
  • 요청한 작업을 즉시 마칠 수 없다면 즉시 제어권을 반환한다.
  • 호출한 함수가 다른 일을 할 수 있는 기회를 준다.

호츨된 함수(노동자)가 호출한 함수(주인)에게 즉시 제어권을 반환한다.


동기, 비동기 / 블로킹, 논-블로킹의 조합

동기(Sync) + 블로킹(Blocking)

호출한 작업 결과가 처리되어 나올 때까지 기다렸다가 결과 값과 제어권을 반환한다.

  1. 작업반장이 노동자_1에게 작업A를 지시한다.
  2. 작업반장은 노동자_1이 작업A를 끝날 때 까지 기다린다(Sync, Blocking)
  3. 노동자_1이 작업A를 끝내면 작업반장이 확인한다.
  4. 작업반장은 노동자_2에게 작업B를 지시한다.

하나의 회선이 하나의 통로를 지나가는 느낌

동기(Sync) + 논-블로킹(Non-Blocking)

호출한 작업의 결과가 없다면 바로 제어권을 반환한다. 결과가 있으면 바로 결과 값을 반환한다. 결과가 발생할 때 까지 계속 완료되었는지 확인한다.

  1. 작업반장이 노동자_1에게 작업A를 지시한다.
  2. 작업반장은 노동자_1이 작업A를 끝날 때 까지 다른사람에게 작업을 지시하지않는다.(Sync)
  3. 그동안 작업반장은 다른 업무를 본다.
  4. 노동자_1이 작업A를 끝내면 작업반장이 확인한다.
  5. 작업반장은 노동자_2에게 작업B를 지시한다.

여러 회선이 하나의 통로를 지나고자 하는데 현실은 그렇지 못한다는 느낌

비동기(Async) + 블로킹(Blocking)

호출되는 함수의 제어권이 바로 반환되지 않고, 호출한 함수는 작업 완료 여부를 신경쓰지 않는다. 결과 값은 callback으로 전달한다. 대표적으로 Node.js + MySQL 조합이라고 한다.

  1. 작업반장이 노동자_1에게 작업A를 지시하고, 노동자_2에게 작업B를 지시하려는데 (비동기 시도)
  2. 노동자_1이 작업반장을 붙잡고 작업A가 끝날 때 까지 붙잡아둔다.(블로킹)
  3. 노동자_1의 작업A가 끝나면 작업반장은 노동자_2에게 작업B를 지시한다.

하나의 회선이 여러 통로를 지나고자 한다는 느낌

비동기(Async) + 논-블로킹(Non-Blocking)

작업 요청을 받아 작업을 별도로 진행함과 동시에 바로 제어권을 반환한다.
결과 값은 별도의 작업 진행 후 callback으로 전달한다.

  1. 작업반장이 노동자_1에게 작업A를 노동자_2에게 작업B를 지시하였다.(비동기 흐름)
  2. 작업반장은 작업 지시 이외에도 다른 업무를 보기 시작한다.
  3. 각 노동자들은 본인이 맡은 작업이 끝나는대로 작업반장에게 결과를 보고한다.(논 블로킹)

여러의 회선이 여러 통로를 지나가는 느낌

동기와 비동기는 작업반장의 입장, 블로킹과 논블로킹은 노동자의 입장에서 생각해보아야 한다.
즉 호출하는 주최가 작업반장, 호출 되는 대상이 노동자라고 생각하면 된다.

profile
프론트엔드 개발자

0개의 댓글