이벤트 루프란?
이벤트 루프에 대해서 설명, 동시성 모델에 대해서 설명
먼저 자바스크립트는 싱글 스레드 이지만 동시에 논블로킹으로 실행이 된다.
잊지말자. 자바스크립트 파일을 기계가 알아 들을 수 있게 기계어로 번역을 해주는 자바스크립트 엔진
선언한 변수들이 어디에 저장되어있는지 기록하는 장치 == memery heap
call stack이 무엇이냐?
먼저 들어간것이 나중에 나오는 stack 형태(자료구조)
call이 쌓여진 형태 (call이란 function을 호출하는것)
call 즉 호출이 되어지면 무조건 call stack에 쌓인다.
함수들을 스택형태로 저장해주고 저장해준 함수들을 하나씩 실행하는 역할을 하는것이 call stack
call stack을 통해서 어떤 함수를 실행하고 있는지 알 수 있다.
web api 무엇이 있을까? = dom, ajax , timeout...
이벤트 루프는 call stack 을 계속 보고 있다가 call stack이 비어있으면
callback queue에 있던 것을 call stack으로 넘겨준다.
call back queue : 함수들 중에 인자로 전달된 함수를 callback 이라고 한다. 이러한 것이 큐 형태로 쌓여 있다.
web api
논블로킹 시 작업1이 실행되는 동안 작업2도 어딘가에서 실행이 된다는것인데
그 어딘가가 web api 이고
실행된것을 callbackqueue에서 받아줌 그러면 이벤트 루프가 callstack으로 던져줌
자바스크립트는 싱글 스레드 기반 언어이다. 함수를 실행하면 함수 call이 스택에 순차적으로 쌓이고 스택의 맨위에서부터 아래로 한번에 하나의 함수만 처리 할 수 있다.
하지만, 자바스크립트에는 이벤트 루프라는것을 통해 동시성을 지원한다. (동시에 일어나는 것이 아니라 동시에 일어나는 것처럼 보이게 하는것이다!)
이벤트 루프는 콜 스택에서 실행 중인 게 있는지 확인하고, Event queue에 작업이 있는지 확인해서 콜스택이 비어있다면 이벤트큐 내의 작업이 콜스택으로 이동되어서 실행된다.
- Memory Heap : 메모리 할당이 일어나는 곳
(ex, 우리가 프로그램에 선언한 변수, 함수 등이 담겨져 있음) - Call Stack : 코드가 실행될 때 쌓이는 곳. stack 형태로 쌓임.
- Stack(스택) : 자료구조 중 하나, 선입후출(LIFO, Last In First Out)의 룰을 따른다.