동기, 비동기, 블록킹, 논블록킹

목적

고객이 커피점에서 커피를 주문하는 과정을 예시로 동기비동기, 블록킹논블록킹 4개의 대한 개념과 각각의 차이점을 알아보도록 한다.

Sync(동기) vs Async(비동기)

동기비동기는 보통 호출하는 곳(고객)의 입장으로, 전체과정을 기다릴 것인지 아닌지로 나눌 수 있을 것 같다.

Sync

고객은 카운터에 주문을 하고나서 커피가 나오기까지의 과정을 계속 기다리고 있는다. 그리고 커피를 받고나서 자신의 해야할 작업을 다시 시작한다.

Async

다음으로 비동기를 예시를 든다면, 고객은 카운터에 주문을 한 후, 자신의 할일을 하다가 커피가 나오면 그 때 받아간다.

그리고 이 커피가 나왔는지 어떻게 체크하냐에 따라서 블록킹논블록킹으로 나눌 수 있다.

Blocking(블록킹) vs Non-Blocking(논블록킹)

커피가 나왔는지 안나왔는지 알 수 있는 방법은 아래와 같이 두 가지 경우로 나타낼 수 있다.

  • 진행중이던 작업을 마친 후 다시 카운터에서 커피가 나오길 기다린다(작업이 지속되지 않는다) - 블록킹
  • 진행중이던 작업 도중에 커피가 나왔음을 알려주면 받아간다(작업이 지속된다) - 논블록킹

Blocking

만약 작업 도중에 커피가 꼭 필요한 시점이라면 Blocking 방식으로 요구할 수도 있다.

NonBlocking

커피가 꼭 필요한 시점이 아니라면 그냥 하던일을 계속하다가 커피를 받으면 된다.

Reference

  • https://brunch.co.kr/@springboot/267