프로세스
- 현재 실행중인 프로그램의 인스턴스
- 독립 메모리 영역을 할당받으며 다른 프로세스에 영향을 미치지 않음.
스레드
- 프로세스 내부에서 실행되는 실행 흐름의 단위 ( 프로세스 보다 작은 실행 단위 )
- 프로세스 내에서 같은 메모리를 공유할 수 있음.
콜 스택 (Call Stack)
: 함수 호출이 쌓이는 곳입니다.
JavaScript는 단일 쓰레드 언어로, 한 번에 하나의 함수만 실행할 수 있습니다.
이벤트루프
(자바스크립트 런타임 외부에서 비동기 실행을 돕기위해 만들어진 장치)
이벤트루프의 역할:
콜스택이 비어있는지 지속적으로 확인하며, 비어있다면 태스크큐 마이크로태스크 큐의 대기중인작업들을 콜스택으로 이동시킨다.
( = Tick )
- 태스크큐: setTimeout, setInteverval 등의 함수가 호출되면 타이머를 설정하고 시간이 되면 실행될 콜백을 WebAPI또는 Node.js에 넘김. 해당 콜백은 시간이되면 태스크큐로 이동함, 콜스택이 비어있는 경우 내부 콜백이 콜스택으로 이동
- 마이크로태스크 큐: Promise의 then, catch, finally 콜백, 그리고 MutationObserver의 콜백 등이 이곳에 위치, 이들은 비동기적으로 실행되지만, 일반적인 이벤트나 setTimeout과 같은 비동기 작업보다 더 높은 우선순위를 가짐. ( 마이크로태스크 > 태스크 )
콜 스택이 비워지면 이벤트 루프는 먼저 마이크로태스크 큐의 작업들을 모두 처리하고, 그 다음에 태스크 큐의 작업을 처리.
즉, 마이크로태스크 큐의 모든 작업이 완료될 때까지 새로운 태스크는 실행되지 않음.
'Javascript' 카테고리의 다른 글
일급함수와 클로저(Closure) (0) | 2023.12.10 |
---|---|
실행 컨텍스트와 렉시컬 환경 (0) | 2023.12.10 |
Hoisting (0) | 2023.12.10 |