구버전/JavaScript

[Javascript] Blocking / Non-Blocking vs Sync / Async

고래강이 2024. 1. 17. 23:40

개요

  • 배우는 목적
  • Blocking / Non-Blocking
  • Sync / Async
  • 정리

 

배우는 목적

기본적으로 블록과 동기가 같은 의미인가에 대해서 아니라고 확실히 대답할 수 있을만큼의 지식을 기르는 것에 있다. 자칫 오해할 수 있는 개념이기에 조금 정립하고 넘어가자.

Blocking , Non-Blocking

제어권이 있는지 없는지에 따라서 Blocking과 Non-Blocking으로 나뉜다.

 

Blocking

자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
즉, 호출된 함수는 자신이 할 일을 모두 마칠때까지 제어권을 계속 가지고 있으며 호출한 함수에게 바로 돌려주지 않는 상황

 

Non-Blocking

다른 주체의 작업에 관련 없이 자신의 작업을 하는 것
즉, 호출된 함수는 자신이 할 일을 모두 마치지 않았더라도 바로 제어권을 호출한 함수에게 건네주어 다른 일을 진행할 수 있도록 해주는 상황

 


 

Sync , Async

결과를 돌려주었을 때 순서와 결과에 관심이 있는지 없는지로 판단

 

Sync

동기라는 의미로 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미한다
즉, 호출된 함수의 수행 결과 및 종료를 호출한 함수와 함께 신경 쓰는 경우

 

Async

시작과 종료가 일치하지 않고 끝나는 동시에 시작을 하지 않음을 의미한다.
즉, 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 쓰고 처리하는 경우

 


정리

 

우리가 일반적으로 알고 있는 동기 방식이 Sync-Blocking방식이며 비동기 방식은 Async-NonBlocking방식이다.

Sync-Non-Blocking은 거의 사용되지 않고 어쩌다 가끔 한번씩 나오겠지만 Async-Blocking의 경우에는 일어나면 안되는 거의 최악의 상황이라고 보면 된다.

제어권의 개념과 순서와 결과에 대한 관심을 잘 구분해서 2가지 개념을 구분해서 이해하면 좋을 것 같다.