Blocking vs Non-Blocking, Sync vs Async

sunny·2024년 5월 12일
1

Blocking과 Non-Blocking, Sync와 Async 언뜻 보면 비슷한 개념으로 느껴질 수도 있다.

하지만 제어권, 결과값에 대한 관심도 라는 관점에서 살펴보면 둘은 명확히 다른 개념이다!

Blocking, Non-Blocking

다른 주체가 작업할 때 자신의 제어권이 없는지 or 있는지

Sync, Async

호출한 함수의 결과에 관심이 있는지 or 없는지

Blocking, Non-Blocking

💡 제어권의 주체를 넘기느냐 안 넘기느냐

Blocking

제어권을 넘기고 제어권을 다시 돌려받을 때까지 기다렸다가 돌려받고 동작을 시작

  1. 함수 A를 실행하다 B를 호출한다. 이때 제어권을 B에게 넘긴다.
  2. B를 실행한다. (이때 A는 제어권이 없기 때문에 실행할 수 없다.)
  3. B의 실행이 끝나면 제어권을 다시 A에게 돌려준다.
  4. 제어권을 돌려받은 A는 다시 실행한다.

Non-Blocking

제어권을 넘기지 않고 동작

  1. 함수 A를 실행하다 B를 호출한다. 이때 제어권을 넘기지 않는다.
  2. B를 실행하고, A는 자신이 가진 제어권으로 계속 실행한다.

Sync vs Async

💡 호출되는 함수의 작업 완료 여부를 신경 쓰냐 안 쓰냐

Sync(동기)

함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것

Async(비동기)

함수 A가 함수 B를 호출할 때 콜백 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행

함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다.

Blocking/Non-Blocking, Sync/Async 조합!

1. Blocking/Sync

  1. 함수 A를 실행하다 B를 호출한다. 이때 제어권을 B에게 넘긴다.
  2. B를 실행한다. (이때 A는 제어권이 없기 때문에 실행할 수 없다.)
  3. B의 실행이 끝나면 제어권과 결과값을 A에게 돌려준다.
  4. 제어권을 돌려받은 A는 B의 결과값을 참고하여 다시 실행한다.

2. Non-Blocking/Sync

  1. 함수 A를 실행하다 B를 호출한다. 이때 제어권을 넘기지 않는다.
  2. B를 실행하고, A는 자신이 가진 제어권으로 계속 실행한다.
  3. 이때 A는 B의 결과값이 필요하기 때문에 자신의 코드를 실행하면서, 중간중간 B에게 완료 여부를 물어본다.

3. Blocking/Async

  1. 함수 A를 실행하다 B를 호출한다. 이때 제어권과 콜백함수를 B에게 넘긴다.
  2. B를 실행한다. (이때 A는 제어권이 없기 때문에 실행할 수 없다.)
  3. B의 실행이 끝나면 콜백함수를 호출하면서 제어권을 다시 돌려준다.
  4. 제어권을 돌려받은 A는 다시 실행한다. (이때 B의 결과값 관심 X)

4. Non-Blocking/Async

  1. 함수 A를 실행하다 B를 호출한다. 이때 콜백함수만 넘긴다.
  2. B를 실행하고, A 또한 자신이 가진 제어권으로 계속 실행한다.

0개의 댓글

관련 채용 정보