CS

[OS] Blocking vs Non-Blocking, Sync vs Async

jyjyjy25 2025. 2. 18. 00:08

Blocking / Non-Blocking

  • Blocking: 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것

 

  • Non-Blocking: 다른 주체의 작업에 관련없이 자신의 작업을 하는 것

 

→ 다른 주체가 작업을 할 때 자신에게 제어권이 있는지 없는지. 제어의 관점. 제어권의 유무

 

Sync / Async

  • Sync: 동기. 끝나는 동시에 시작한다. 함수의 종료 시점과 결과값을 전달하는 시점이 동일하다.

 

  • Async: 비동기. 끝나는 동시에 시작하지 않는다. 함수의 종료 시점과 결과값을 전달하는 시점이 일치하지 않는다.

 

→ 순서와 결과(처리)의 관점. 결과의 관심 유무

 

💡 Blocking == Sync, Non-Blocking == Async ??
관점의 차이이다.
제어권이라는 관점에서는 Blocking, Non-Blocking으로 나눌 수 있고, 시간이라는 관점에서는 Sync와 Async로 나눌 수 있다.

 

Blocking vs Non-Blocking, Sync vs Async

  Block Non-Block
Sync JAVA  
Async   JavaScript

 

Blocking / Sync

  • 예시) 자바의 입출력(IO)
    • 입력값을 받을 때까지 blocking 처리되며, 제어권이 넘어갔기 때문에 아래 함수가 실행되지 않는다.

 

Non-Blocking / Sync

  • 제어권은 자기 자신에게 있지만, 결과에 관심을 가지기 때문에 계속 물어본다. 만약 결과가 나오면 이후 과정을 동기적으로 처리한다.
  • 예시) 화면 전환 시 정보의 로드율(게임의 로드율)

 

Blocking / Async

  • 자신의 작업에 대한 제어권이 없지만 async이기 때문에 결과를 바로 처리하지 않아도 된다. 굳이 비동기인데 blocking을 쓸 필요가 없다.
  • 대게 개발자들이 Non-Blocking / Async로 처리하려다 실수한 경우이다. 즉 안티패턴.

 

Non-Blocking / Async

  • 다른 작업이 시작되어도 자신이 하던 작업을 멈추지 않는다. 따라서 양쪽에서 각자 작업을 처리할 수 있게 된다.
    또한 Async이므로 결과가 반환되어도 반환된 결과를 바로 처리하지 않아도 된다. 따라서 자신의 작업이 끝나면 그때 처리한다.
  • 예시) 자바스크립트 API 요청

 

Reference


[10분 테코톡] 호기의 blocking VS non-blocking, sync VS async