API 란?
자바스크립트 엔진은 비동기 처리를 제공하지 않는다.
-> 비동기 코드는 정해진 함수( = API )를 제공하여 활용 이 가능하다.
비동기 API 모듈의 예시
다음은 Web API이다.
1. setTimeout
2. XMLHttpRequest
3. fetch
★ node.js 의 경우 파일 처리 API, 암호화 API등을 제공함 + 이벤트 루프는 node.js에서 libuv 라는 모듈에서 비동기 처리를 담당함
비동기 처리 모델
- 비동기 코드를 처리하는 모듈은 자바스크립트 엔진 외부에 있다.
- 모듈은 event loop, task queue, job queue 등으로 구성된다.
- API 모듈은 비동기 요청을 처리후에 태스크 큐에 콜백 함수를 넣는다.
- 자바스크립트 엔진은 콜 스택이 비워지면, 태스크 큐의 콜백 함수를 실행한다. (콜 스택이 비워지는 걸 기다렸다가 태스크 큐에서 콜백함수를 꺼냄)
- Queue는 FIFO 이기 때문에 이벤트 루프가 콜 스택이 비워졌을 때, 태스크 큐에서 콜백 함수가 들어온 순서대로 함수를 내보낸다.
★ 단, 큐는 여러 개가 존재하며 그 중 우선순위가 높은 큐(job queue 같은) 에서 나중에 들어온 콜백 함수가 실행될 수 있다.