동기(Synchronous) VS 비동기(Asynchronous)

  • 동기 : 함수A가 함수B의 작업 완료 후 리턴을 기다리거나, 작업의 완료(리턴)를 계속해서 확인하는 작업 흐름
  • 비동기 : 함수 A가 함수 B를 호출할 때 콜백 함수를 함께 전달하여 함수 B의 작업이 완료되면 함께 보낸 함수를 실행
    • 이전에 호출한 함수의 작업 완료 여부를 신경쓰지 않는 상황
    • call back이 오기 전까지 신경쓰지 않고 다른 일을 할 수 있다.
  • 호출되는 함수의 작업 완료 여부를 신경쓰냐, 함수 실행/리턴 순차적인 흐름을 따르는가

 

 

블로킹(blocking) vs 논블로킹(non-blocking)

  • 블로킹
    • A 함수가 B를 호출하면 제어권을 B 함수에게 넘겨짐
    • A에겐 제어권이 없기 떄문에 실행을 멈춤
    • B함수 실행이 끝나면 제어권을 다시 A가 받아서 실행
  • 논블로킹
    • A함수가 B함수를 호출해도 본인 행동의 제어권을 본인(A)이 가지고 있음
    • B 함수가 실행되지만 A는 B를 호출한 이후에도 자신의 코드를 계속 실행할 수 있다.

 

 

4가지의 조합적 동작의 차이

  • Sync - Blocking
    • 함수 A는 함수 B의 리턴값을 필요로한다. (동기)
    • 제어권을 함수 B 에게 제어권을 넘겨준다. (블로킹)
    • 함수 B가 실행을 완료하여 리턴값과 제어권을 돌려줄 때까지 기다린다. 
  • Sync - NonBlocking
    • A 함수는 B 함수를 호출한다.
    • 이 때 A 함수는 B 함수에게 제어권을 주지 않고 본인의 코드를 계속 실행한다 (논블로킹)
    • 하지만 A 함수는 B 함수의 리턴값이 필요하기 때문에, 계속 B 함수에게 함수 실행을 완료했는지 물어본다 (동기)
      • 대기 시간동안 다른 일 수행 가능
  • Async - Nonblocking
    • A 함수는 B 함수를 호출한다.
    • 이 때 제어권을 A는 계속 가지고 있어서 B 함수를 호출한 이후에도 멈추지 않고 자신의 코드를 계속 실행 (논블로킹)
    • B 함수를 호출할 때 콜백 함수를 같이 넘겨서 B 함수가 작업이 끝나면 콜백함수 실행을 통해 리턴 전달 (비동기)
  • Async - Blocking
    • A 함수는 B 함수를 호출
    • 제어권을 함수 B 에게 제어권을 넘겨준다. 제어권을 받기 전까지 기다린다. (블로킹)
    • B 함수를 호출할 때 콜백함수를 같이 넘겨서 B 함수가 작업이 끝나면 콜백함수 실행을 통해 리턴 전달 (비동기)
     

'CS > 네트워크' 카테고리의 다른 글

[네트워크] HTTP와 HTTPS, TCP & UDP, GET & POST, OSI 7 계층  (0) 2022.09.30

+ Recent posts