과거 프로그래밍 자료들/Javascript&typescript
호출스택, 이벤트루프, 태스크큐, 백그라운드
평부
2022. 9. 15. 11:51
출처 : https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard
호출스택 (함수의 호출, 자료구조의 스택)
- 호출시 Anonymous는 항상 있다고 생각하기
- 함수 호출 순서대로 쌓이고 역순으로 실행
- 함수 실행 시 스택에서 빠짐
[예시]
function first() {
second();
console.log("첫 번째");
}
function second() {
third();
console.log("두 번째");
}
function third() {
console.log("세 번째");
}
first();
//결과
//세번째 -> 두 번째 => 첫 번째
[예제 2]
function run() {
console.log("3초 뒤 실행");
}
console.log("시작");
setTimeout(run, 3000);
console.log("끝");
//결과
//시작
//끝
//(3초 뒤) 3초 뒤 실행
* 해당 코드는 run은 호출하지 않았는데 실행됨, 호출스택만으로 설명되지 않음
▶ 호출스택 + 이벤트 루프
이벤트 루프
- 이벤트 발생 시 (setTimeout 등) 호출할 콜백 함수들(예제는 run)을 관리하고 호출할 순서를 결정하는 역할
- 이벤트 루프가 태스크 큐의 콜백을 호출 스택으로 올림
▶ 조건 : 호출스택이 비워있어야 함(호출스택에 함수가 많이 차 있으면 run 함수는 태스크 큐에서 대기)
태스크 큐
- 이벤트 발생 후 호출되어야 할 콜백 함수들이 순서대로 기다리는 공간
백그라운드
- 타이머나 I/O 작업 콜백, 이벤트 리스너들이 대기하는 공간, 여러 작업이 동시에 실행 가능