Blocking vs Non-Blocking
- Blocking : 해당 작업을 다른쪽에서 처리하고 돌려줄 때까지 클라이언트는 다른 작업을 하지 못함
- Non-Blocking : 해당 작업을 다른 쪽에서 처리하는 동안 클라이언트는 기다리든 다른 작업을 하든 상관없음.
- 관심이 제어권에 있음
Sync vs Async
- Sync : 클라이언트에서 다른쪽에서 작업이 처리되고나서 받은 데이터를 가지고 바로 처리함
- Async : 클라이언트에서 다른쪽에서 작업이 처리된 결과에 대해 큰 비중 두지 않고 결과가 돌아 오더라도 그 상황에 대해 처리를 할 수도 안할 수도 있음(해야할 일을 적어서 보내줌. 언젠가 처리하면 됨)
- 동기와 비동기는 결과와 순서에 관심이 있음

Blocking/Sync
- 다른 작업이 수행되는 동안 현재 작업은 멈추게 됨
- Sync의 관점은 결과의 처리. 결과를 반환하면 해당 업무를 바로 처리하게 됨
- System.in 의 동작 방식이 이와 같음
Non-blocking / Sync
- 다른 작업이 수행되는 동안 자신의 작업을 수행할 수 있음
- 그러나 결과에 관심이 있기 때문에 결과가 나왔는지 계속 확인하게 됨
- Blocking/Sync와 큰 차이가 없음
- 예 : 게임에서 맵을 불러올 때 그 맵의 로딩이 어느정도 진행됐는지를 보여줘야 할 때?
Blocking/Async
- 굳이 사실 필요하지 않은 조합. Async인데 기다리고 있을 필요가 없는것
- 코드 구현 잘못했을 때 이와 같은 상황이 발생할 수 있음
Non-blocking/Async
- 자신이 하던 작업을 다른 작업이 시작하더라도 중단하지 않음
- Async는 결과가 돌아오더라도 바로 처리하는 것이 아닌 언제든지 처리하는 것
- 예시 : 자바스크립트에서 api요청하고 나서 콜백을 통해 추가적인 작업을 처리하는 경우