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