두 개념이 차이는 작업의 완료를 기다리는 방식에 있다.
동기/비동기는 요청한 작업에 대한 완료가 순차적으로 수행할지 아닐지에 대한 관점이라면, 블로킹/논블로킹은 현재 작업이 block(차단,대기) 되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점이다.
1. 간단하고 직관적인 프로그래밍 모델을 제공한다
2. 자원을 효율적으로 활용허지 못하는 경우가 많다
1. 자원 활용도가 높아진다. 비동기 방식의 프로그래밍과 매우 좋은 효과를 나타낸다
2. 완료 순서를 예측하기 어렵거나, 비동기 결과 처리 로직을 추가적으로 구현해야 할 수있기 때문에 프로그래밍 복잡도가 높아질 수 있다
논 블로킹은 작업의 완료를 기다리지 않는 것을 의미하며,
비동기는 특정 작업이 백그라운드에서 실행되는 동안 주 스레드가 다른 작업을 수행할 수 있도록 하는것을 의미하기에, 둘은 같은 개념은 아니다