본문 바로가기

CS STUDY/네트워크

동기/비동기 & 블로킹/논블로킹

 동기(Synchronous)  &  비동기(Asynchronous)

1. 동기 방식(Synchronous)

  • 요청한 작업에 대해 완료 여부를 따져 순차적으로 처리 => 하나의 작업이 완료되어야 다음 작업 수행
  • 함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴 값을 계속 확인하면서 신경씀 

2. 비동기 방식(Asynchronous)

  • 요청한 작업에 대해 완료 여부를 따지지 않기 때문에 다음 작업을 그대로 수행 
  • 함수 A가 함수 B를 호출할 때 콜백함수를 함께 전달하고 호출한 후로 함수 B의 작업 완료 여부는 신경쓰지 않음 

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

1. 블로킹(Blocking)

  1. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
  2. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 멈춘다.
  3. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.

2. 논블로킹(Non-Blocking)

  1. A함수가 B함수를 호출하면, 제어권은 A가 그대로 가진 채 B함수를 실행한다.
  2. B함수 호출 이후에도 A함수는 자신의 코드를 계속 실행한다.

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

1. Sync-Blocking

  1. A함수는 B함수의 리턴값(동기)을 필요로 한다.
  2. 제어권을 B함수에게 넘겨주고, B함수가 실행을 완료하여 리턴 값(동기)과 제어권(블로킹)을 돌려줄 때까지 기다린다.

2. Sync-Nonblocking

  1. A함수는 B함수를 호출하는데 B함수에 제어권을 주지 않고(논블로킹) 자신의 코드를 계속 실행한다.
  2. A함수는 B함수의 리턴 값이 필요하기 때문에(동기) 중간중간 B함수에게 계속 물어본다.

3. Async-Nonblocking

  1. A함수는 B함수에게 제어권을 넘기지 않고(논블로킹) 자신이 계속 가지고 있는다.
  2. B함수를 호출하면서 콜백함수를 넘긴다.
  3. B함수는 자신의 작업이 끝나면 콜백함수를 실행한다.(비동기)

4. Async-Blocking 

  1. A함수는 B함수의 리턴 값에 신경쓰지 않고, 콜백함수를 보낸다.(비동기)
  2. 그럼에도 불구하고 A함수는 B함수에게 제어권을 넘긴다.(블로킹)
  3. 자신과 관련없는 함수의 작업이 끝날 때까지 기다려야 한다. => 비효율적?
    => Sync-Blocking과 성능이 비슷

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

UDP  (0) 2024.03.03
TCP 3-Way Handshake  (0) 2024.03.03
OSI 7 계층  (0) 2024.03.02
로드밸런싱(Load Balancing)  (0) 2023.12.16
HTTP & HTTPS  (0) 2023.12.16