정의
-
자바스크립트는 코드 실행, 이벤트 수집과 처리, 큐에 놓인 작업들을 담당하는 이벤트 루프를 기반으로 하는 동시성 모델을 가진다. (동시성이란 동시에 실행되는 것처럼 보있는것 반대로는 병렬성 )
![image](https://developer.mozilla.org/files/4617/default.svg)
-
스택
- 함수가 호출하는 순서대로 스택에 쌓이며, 함수가 실행이 되서 결과를 리턴하면 스택에서 비워진다.
-
힙
- 객채들은 힙 안에 할당됩니다. 힙은 구조화하지 않는 넓은 메모리 영역을 지칭합니다.
-
큐 - 이벤트 리스너, setTimeout 등 브라우저에서 지원하는 함수들은 일정시간이 지나면 결과값을 큐로 보내 스택이 비워져 있으면 스택으로 올려 함수를 호출시킨다.
IFRAME과 웹워커에서의 이벤트 루프
- 웹워커와 iframe은 자신만의 스택, 힙, 메시지 큐를 가지고 있습니다.두 별개의 런타임들은 postMessage method를 통해서만 서로 통신할 수 있습니다. 이 메서드는 다른 런타임이 message 이벤트 핸들러를 등록하고 있다면 해당 런타임의 큐에 메시지를 추가하여 정보를 받아올 수 있다..
컴퓨터 메모리에서 스택 힙
-
스택
- 함수에 의해 생성된 변수를 생성하는 메모리의 영역, 자료구조 "스택"으로 구현되며 CPU에 관리되고 최적화된다
- 스택에 생성된 변수는 함수 기준으로 실행하면 생성되고 / 종료가 되면 사라지기 때문에 전역변수보다는 지역변수로 사용되어야 한다.
- 또한 OS별로 스택 크기가 제한의
-
힙
- 힙은 사용자가 관리하는 영역이라고 생각하면 된다. 온전히 메모리 할당과 해제의 역할을 사용자가 할 수 있다.
- 자유도가 높은 만큼 메모리 관리를 해주지 않으면 누수로 인해 메모리를 효과적으로 사용하지 못 할 수 도잇다.
- 힙 메모리는 포인터를 사용하여 엑세스 하기 때문에 읽고 쓰는데 느립니다.
- 힙에서 생성한 변수는 프로그램 전체에서 접근할 수 있어 전역으로 사용한다.
-
언제 힙을 사용해야 합니까?
- 큰 배열이나 오브젝트를 할당하거나 전역변수를 지속적으로 사용할때 힙에 할당한다.
- 동적으로 메모리의 크기를 변경할수 있으므로 힙을 사용한다.
-
스택을 크게 만들어서 사용하면 안될까?
- 스택은 CPU에서 관리하는 것이기 다루기 힘들다
- 스택을 크게 만들면 스택오버플로우 같은 cpu에 한계치를 확인하는 오류를 늦게 확인한다
- 스택을 크게 만들어 쓰레드를 많이 만든다 -> 하지만 모든 쓰레드를 사용하지 않는다 (효율이 적다)