슬슬의 공부

Blocking / Non-blocking / Sync / Async

seulseul 2023. 1. 16. 11:50

아래는 동기(Synchronous)와 비동기(Asynchronous), 그리고 블럭(Blocking)과 넌블럭(Non-blocking) 에 대해 설명하는 그림이다.

 

https://developer.ibm.com/articles/l-async/

Blocking이 곧 Synchronous 와 같고 Non-blocking 이 곧 Asynchronous 와 같은 개념으로 잘못 이해할 수 있다.

  • 동기 (Synchronous) 와 비동기 (Asynchronous)
    • 비동기 (Asynchronous) 는 함께 시간을 맞추지 않는 것이다.
    • 동기 (Synchronous)
      • A 와 B 가 시작시간 또는 종료시간이 일치하면 동기
      • A 가 끝나는 시간과 B 가 시작하는 시간이 같으면 동기
    • 호출된 함수의 수행 결과 및 종료를 호출한 함수가(호출된 함수뿐 아니라 호출한 함수도 함께) 신경 쓰면 동기 (Synchronous)
    • 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경 쓰고 처리한다면(as a callback func) 비동기 (Asynchronous)
  • 블럭 (Blocking) 과 넌블럭 (Non-blocking)
    • 동기 , 비동기와는 관점이 다르다.
    • 내가 직접 제어할 수 없는 대상을 상대하는것이다. (제어권)
    • 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않으면 블럭 (Blocking)
    • 호출된 함수가 자신이 할 일을 채 마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수가 다른 일을 진행할 수 있도록 해주면 넌블럭 (Non-blocking)