(1) js 엔진이 javascript 코드를 실행할때 컴퓨터로부터 할당받은 메모리 공간에 필요한 정보(코드, 변수, 함수 등)를 저장해 두는 공간
(1) Global Execution Context (전역)
(2) Function Execution Context
(3) Garbage Collection 과 Memory 해제
✏️
Phase
생성 단계 (Creation Phase)
- 해당 execution context에서 사용할 코드, 변수, 함수들을 준비해두는 단계
실행 단계 (Execution Phase)
- 코드를 실행하면서 이미 준비해둔 변수, 함수어의 계산이 완료된 값을 할당하는 단계
(1) 여러개의 데이터를 저장할 수 있는 자료구조
(2) LIFO(Last In First Out)의 규칙으로 데이터를 추가 및 제거
(3) Stack에 담을 수 있는 요소의 개수에는 제한이 있다.
(이를 초과하게 되면 Stack OverFlow 오류 발생)
(1) JS엔진이 Execution Context 를 관리하기 위해 필요하다.
(2) 새로운 Execution Context를 생성해야 할 때, Push
(3) 실행이 끝난 Execution Context를 제거할 때, Pop
❶ Thread (스레드) 개념 정리
- 프로세스가 작업을 실행하는 코드 묶음의 최소 단위
❷ 다중 스레드 (Multi-Thread)
(1) 프로세스가 여러개의 스레드를 만들어 동시에 작업을 처리하는 것
(2) 작업 스케줄러에 의해 스레드가 동적으로 생성, 재활용, 소멸 됨
(3) 스레드 간 자원 공유 가능
❸ JavaScript *런타임의 코드 실행 방식
(1) JS엔진은 Single-Threaded 모델을 사용한다.
(2) 한 시점에 하나의 코드만을 실행할 수 있다.
(3) *Non-Blocking 방식으로 작업을 실행하여 *동시성을 얻을 수 있다.
❹ Non-Blocking 작업 예제
(1) setTimeout()을 사용하여 함수 호출 (setTimeout = Web API)
(2) ajax를 이용한 http request를 호출 했을 경우 응답 처리
(3) 유저의 웹페이지 Event 발생(클릭, 드래그 등) 으로 인한 함수 호출
(4) DB 서버로 요청을 날리는 작업을 함 (Node.js)
용어 정리
❶ Runtime Environment : 코드 실행 환경
❷ Non-Blocking : A 함수에서 B 함수를 호출 했을 때, B 함수는 제어권을 A에게 돌려주고 A는 다음 작업을 함
❸ 동시성 (Concurrency) : 여러 작업을 동시에 처리하는 성질