Blocking vs Non-Blocking, Sync vs Async

한량·2023년 4월 25일
0
post-thumbnail
  • 블록킹과 논블록킹: 프로세스의 유휴 상태에 대한 개념
  • 동기와 비동기: 프로세스의 수행 순서 보장에 대한 매커니즘

Blocking vs Non-Blocking

둘의 차이는 다른 주체가 작업을 할 때 자신의 제어권이 있는지 없는지로 구분할 수 있다.

  • Blocking: 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것.
    예시에서는 커널이 데이터를 입력받을 때까지 대기. 리소스가 일을 하지 않고 낭비될 수 있음.

  • Non-blocking: 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것.
    입력 데이터를 보냈는 지 수시로 확인한다는 점이 낭비일 수 있음.

Sync vs Async

동기, 비동기는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 판단할 수 있다.

  • Syncronous: 동기. 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미
  • Asyncronous: 비동기. 시작, 종료가 일치하지 않으며 끝나는 동시에 시작하지 않음을 의미

4가지 조합의 경우

  • Blocking/Sync: 입력 요청 등 제어권과 처리 결과가 동시에 반환
  • Non-blocking/Sync: 자신의 업무는 계속 하면서 중간중간 결과가 반환됐는지 확인, 반환됐을 경우 바로 처리. Blocking/Sync와 큰 차이가 없다
  • Blocking/Async: Async라 자신의 작업을 바로 처리하지 않아도 괜찮지만, blocking이라 다른 일을 못함. 보통 개발자의 실수나 제어권 반환 처리를 잘 구현하지 못해 발생하는 등의 이유로 생기는 동작.
  • Non-blocking/Async: 작업 요청 이후 자신의 작업은 그대로 진행. 결과가 반환되어도 바로 처리하는게 아니라 자기 작업이 끝난 이후에 수행. API 요청 이후 다른 작업을 하다가 콜백을 통해 추가적인 작업 처리를 하는 것이 대표적인 예시.

Reference

profile
놀고 먹으면서 개발하기

0개의 댓글