비동기 프로그래밍
동기 처리와 비동기 처리
자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 갖는다
-> 함수를 실행할 수 있는 창구가 단 한개 -> 동시에 2개 이상의 함수를 실행 X
자바스크립트 엔진은 한 번에 하나의 태스크만 실행할 수 있는 싱글 스레드
싱글 스레드는 한 번에 하나의 태스크만 실행할 수 있다-> 처리에 시간이 걸리는 태스크를 실행하는 경우 블로킹이 발생
[!] 브라우저에 내장된 자바스크립트의 엔진이 싱글 스레드이고 브라우저는 멀티 스레드로 동작함
만약, 모든 자바스크립트 코드가 자바스크립트 엔진에서 싱글 스레드 방식으로 동작하면 비동기로 동작이 불가능하다
동기 처리 방식
태스크를 하나씩 처리 -> 실행 순서 보장 / 1번 태스크 종료때까지 2번 태스크 블로킹
비동기 처리 방식
태스크 상태 상관없이 실행 -> 순서 보장 X
ex) setTimeout,setInterval,HTTP 요청, 이벤트 핸들러
이벤트 루프와 태스트 큐
자바스크립트는 싱글 스레드로 동작하지만, 브라우저의 동작을 보면 많은 태스크가 동시에 처리되는 것처럼 보인다
자바스크립트의 동시성을 지원해주는 것이 이벤트 루프다
-이벤트 루프는 브라우저에 내장되어 있는 기능중 하나
출처 : https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf
*콜 스택
- 실행 컨텍스트 스택이 바로 콜 스택 (함수를 호출하면 함수 실행 컨텍스트가 순차적으로 콜 스택에 푸시되어 순차적 실행)
*힙
- 객체가 저장되는 메모리 공간. 콜 스택의 요소인 실행 컨텍스트는 힙에 저장된 객체를 참조
객체는 메모리 공간의 크기를 런타임에 동적 할당 ( 크기가 정해져 있지 않기 때문)해야 한다
그래서 힙은 구조화 X