[Network] 블로킹과 논블로킹, 동기와 비동기

6720·2023년 11월 23일
0

이거 모르겠어요

목록 보기
31/38
post-custom-banner

사전 지식

  • 제어권: 자신(함수)의 코드를 실행할 권리같은 것
    • 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려줌.
  • 결과값을 기다린다는 것
    • A 함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부를 의미함.

블로킹과 논블로킹

Blocking & Non-Blocking

제어권을 어떻게 처리하느냐에 따라 달라짐.

블로킹

A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨줌.

  1. A 함수가 B 함수를 호출하면 B에게 제어권을 넘김.
  2. 제어권을 넘겨받은 B는 함수를 실행하며, 그동안 A는 제어권이 없기 때문에 함수 실행을 멈춤.
  3. B 함수는 실행이 끝나면 자신을 실행한 A 함수에게 제어권을 돌려줌.

논블로킹

A 함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있음.

  1. A 함수가 B 함수를 호출해도 제어권은 A 함수가 가지고 있음.
  2. A 함수는 B 함수가 실행되는 동안 제어권을 가지고 있기 때문에 실행을 멈추지 않음.

동기와 비동기

Synchronous & Asynchronous

호출되는 함수의 작업 완료 여부를 신경쓰는지의 여부에 따라 달라짐.

동기

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

비동기

A 함수가 B 함수를 호출할 때 콜백 함수를 함께 전달해서 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행함.
A 함수는 B 함수를 호출한 뒤로 B 함수의 작업 완료 여부에는 신경쓰지 않음.

동기 논 블로킹과 비동기 블로킹

동기 블로킹과 비동기 논 블로킹은 잘 상상이 갈 것임.

  • 동기 블로킹은 제어권을 호출된 함수에 넘겨주면서 나중에 리턴값과 제어권을 다시 받아야 하는 것.
  • 비동기 논 블로킹은 호출된 함수에 콜백 함수 외에는 넘기지 않으며 호출된 함수가 종료된 후에 콜백 함수를 실행하는 것. 이때 호출한 함수는 호출된 함수의 작업 여부에는 신경 쓰지 않음.

하지만 동기 논 블로킹과 비동기 블로킹은 조금 다름.

  • 동기 논 블로킹은 제어권을 넘기진 않지만 콜백 함수를 따로 넘기는 것도 아님.
    • 때문에 함수가 실행되는 중간중간에 호출된 함수에게 완료되었는지 물어보게 될 것임.
    • 이는 동기의 성격 중 리턴값을 계속 확인하는 부분임.
  • 비동기 블로킹은 제어권과 콜백 함수를 넘김.
    • 이때 호출한 함수는 제어권이 넘어갔으므로 작업을 중단한 상태에서 호출된 함수의 콜백 함수를 기다려야 함.

참고 자료

https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

profile
뭐라도 하자
post-custom-banner

0개의 댓글