간단하게 정리해봄..
동기 & 비동기 : 특정 작업의 수행 결과를 즉시 받는지, 받지 않는지의 차이.
블로킹 & 논블로킹 : 작업 간 의존성으로 인해 다른 작업의 실행 가능 여부. (실행 흐름이 막히는지, 안 막히는지의 차이.)
예를 들어, 파일을 읽어서 특정 작업을 한다고 하자. 파일을 다 읽기 전까지는 특정 작업을 수행할 수 없으므로 블로킹이다.
그런데 JS의 경우, 이벤트 루프를 통해 파일 읽기를 다른 프로세스에게 위임하기 때문에 파일 읽기가 완료되기 전에 다른 작업을 먼저 수행할 수 있다.
따라서 이 경우 비동기 블로킹이라고 할 수 있다.
또다른 예로서, PR 및 코드리뷰를 가정해보자. 만약 로그인 기능을 PR올렸다고 하자. 회원 정보 기능을 구현하기 위해서는 우선 로그인 기능이 전제되어야 한다. 따라서 해당 PR이 머지되기 전까지는 회원과 관련된 기능을 개발할 수 없으므로 블로킹이다.
만약 해당 기능이 핫픽스 기능이라 빨리 머지되어야 한다면 동기 블로킹이다.
그러나 해당 기능이 급하지 않아서 깃헙 PR을 통해 느긋하게 코드리뷰를 수행한 뒤 머지를 한다면 비동기 블로킹이다.