why
둘은 프로그래밍에서 혼용되어 사용되기도 한다.
병렬/동시 실행이라는 유사한 목표를 위함이고, 실제 코드라인에서 구분이 애매하기도 해서 그렇다. 그러나, 이론으로서는 구분되어야 한다.
what
async는, 작업이 순차적인가를 판별하는 흐름(flow)에 대한 분류이다.
non-blocking은, 작업간 다른 작업의 실행을 막냐를 판별하는 행위적 분류이다.
console.log("1");
setTimeout(() => {
console.log("2");
}, 10000);
console.log("3");
// out
1
3
2
async인 이유
코드 라인 순서대로의 동작이 보장되지 않았다. (10초 대기로 인해)
non-blocking인 이유
타이머가 다음 코드의 동작을 막지 않았다.
so
setTimeout는 'async이며 non-blocking인 함수'이다. 그러나 흔히 비동기(async) 함수로 불리고 있다. 이는 구분되어야 한다.
실제로 이런 기법들이 존재한다.
Sync Blocking (동기 + 블로킹)
Async Blocking (비동기 + 블로킹)
Sync Non-Blocking (동기 + 논블로킹)
Async Non-Blocking (비동기 + 논블로킹)