Dom(document)
AJAX(XMLHttpRequest)
TimeOut(setTimeout setInterval ...)
callStack에 비동기 api가 있으면 background에 빼놓음(settimeout이 0초여도 일단 빼놓고 뒤에 코드 실행 시킴)
그 api가 실행이 되고 api목적이 끝나면 api내부에 본코드를
Task Queue에 잠시 대기 시켜놓음 그리고 Evnet loop가 돌면서
적절한 시기에 대기중인 Task Queue의 코드를 순차적으로 call Stack에 올려놓게됨 (api는 역활을 다했으니 background에서 소멸)
callStack과 teskQueue를 계속 주시 하면서
callStack이 "비어있으면" teskQueue에 들어온 코드를 순서대로 callStack에 집어넣음
js engine 원칙은 single Thread로 동기적 실행함이 원칙이나
node또는 web api가 제공하는 기능들로 multi Thread를 통한 비동기 실행을 구현할 수 있다.