둘의 차이는 다른 주체가 작업을 할 때 자신의 제어권이 있는지 없는지로 구분할 수 있다.
Blocking
: 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것.Non-blocking
: 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것.동기, 비동기는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 판단할 수 있다.
Syncronous
: 동기. 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미Asyncronous
: 비동기. 시작, 종료가 일치하지 않으며 끝나는 동시에 시작하지 않음을 의미Blocking/Sync
: 입력 요청 등 제어권과 처리 결과가 동시에 반환Non-blocking/Sync
: 자신의 업무는 계속 하면서 중간중간 결과가 반환됐는지 확인, 반환됐을 경우 바로 처리. Blocking/Sync
와 큰 차이가 없다Blocking/Async
: Async라 자신의 작업을 바로 처리하지 않아도 괜찮지만, blocking이라 다른 일을 못함. 보통 개발자의 실수나 제어권 반환 처리를 잘 구현하지 못해 발생하는 등의 이유로 생기는 동작.Non-blocking/Async
: 작업 요청 이후 자신의 작업은 그대로 진행. 결과가 반환되어도 바로 처리하는게 아니라 자기 작업이 끝난 이후에 수행. API 요청 이후 다른 작업을 하다가 콜백을 통해 추가적인 작업 처리를 하는 것이 대표적인 예시.