❶ Execution Context란?

(1) js 엔진이 javascript 코드를 실행할때 컴퓨터로부터 할당받은 메모리 공간에 필요한 정보(코드, 변수, 함수 등)를 저장해 두는 공간

❷ 종류

(1) Global Execution Context (전역)

  • js코드를 실행시키게 되면 기본적으로 생성하는 Context
  • 현재 실행되는 코드에서 함수 안에 있지 않은 모든 정보를 담는다. (Function Execution Context에 저장)
  • js 프로그램마다 단 하나의 GEC만 존재 가능
  • js 코드 실행이 마무리 될 때까지 존재

(2) Function Execution Context

  • js 코드를 실행 중, 함수가 실행될 때마다 생성되는 Context (여러개 생성 가능)
  • 현재 실행되는 함수의 인자값과 그 안에 선언된 모든 정보를 담는다.

(3) Garbage Collection 과 Memory 해제

  • 메모리 관리가 안되면 OOM이 뜬다. (프로세스가 죽음. 메모리 관리가 안 되었기 때문이다.)
  • 참조 횟수(Reference count)가 0이 된 개체(변수, 함수)는 주기적으로 메모리에서 지운다.
  • Mark and sweep 알고리즘 사용 (grabage를 찾는 알고리즘)

✏️ Phase

생성 단계 (Creation Phase)
- 해당 execution context에서 사용할 코드, 변수, 함수들을 준비해두는 단계

실행 단계 (Execution Phase)
- 코드를 실행하면서 이미 준비해둔 변수, 함수어의 계산이 완료된 값을 할당하는 단계

❶ Stack 개념 정리

(1) 여러개의 데이터를 저장할 수 있는 자료구조
(2) LIFO(Last In First Out)의 규칙으로 데이터를 추가 및 제거
(3) Stack에 담을 수 있는 요소의 개수에는 제한이 있다.
(이를 초과하게 되면 Stack OverFlow 오류 발생)

❷ Call Stack

(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) : 여러 작업을 동시에 처리하는 성질

profile
#UXUI #코린이

0개의 댓글