Blocking vs Non-Blocking, Sync vs Async

YeJi Kim·2023년 3월 27일
0

계속 헷갈렸던 Blocking vs Non-Blocking, Sync vs Async의 뿌리를 뽑아버리자!!!
마침 해당 내용을 다루고 있는 10분 테코톡 영상이 있어서, 영상을 보고 학습한 내용을 정리해본다.



Blocking vs Non-Blocking

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

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

=> 다른 주체가 작업할 때 자신의 제어권이 있는지 없는지로 볼 수 있다.



Synchronous vs Asynchronous

  • Synchronous(동기): 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미

  • Asynchronous(비동기): 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미

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



조합 4가지 경우

  • Blocking/Sync
    • Blocking의 관점은 제어권에 있다. 다른 작업이 시작되는 동안 동작하지 않는다.
    • Sync의 관점은 결과의 처리이다. 따라서 결과를 반환하면 해당 업무를 바로 처리하게 된다.
    • 예시
      • 자바에서 입력 요청을 할 때 Blocking/Sync를 사용한다.
      • 입력하면 제어권과 결과를 같이 받아서 처리한다.
  • Non-Blocking/Sync

    • Non-Blocking은 다른 작업이 있어도 자신의 제어권을 가지고 일을 한다.
    • Sync는 결과를 반환하자마자 업무를 바로 처리하기 때문에 중간중간마다 결과가 나왔는지 물어본다. 결과를 받을 수 있으면 해당 결과를 가지고 와서 업무를 처리하게 된다.
    • Non-Blocking/Sync는 Blocking/Sync와 큰 차이가 없다.
    • 예시
      • 게임에서 progress를 표시해야 하는 경우에 Non-Blocking을 사용한다.
  • Blocking/Async

    • Blocking이기 때문에 자신의 작업에 대한 제어권이 없다.
    • Async이기 때문에 결과를 바로 처리하지 않아도 된다.
    • 굳이 비동기인데 Blocking을 써야 할까?
  • Non-Blocking/Async

    • Non-Blocking은 다른 작업이 시작되어도 자신이 하던 작업을 멈추지 않는다. 따라서 양쪽에서 서로 각자 작업을 처리하게 된다.
    • Async는 결과를 바로 처리하지 않는다.
    • 예시
      • 자바스크립트에서 API요청을 하고 다른 작업을 하다가 콜백을 통해서 추가적인 작업을 처리할 때 사용



정리



[참고자료]
10분 테코톡 - 멍토의 Blocking vs Non-Blocking, Sync vs Async

profile
이전의 기록들 👉 https://blog.naver.com/reviewerkyj

0개의 댓글