ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트는 싱글스레드인가?
    TodayILearned/javascript 2021. 6. 24. 17:22
    자바스크립트는 싱글스레드 언어이다. 그래서 코드가 위에서부터 아래로 순차적으로 실행된다.
    하지만 정작 웹페이지를 만드려고 코딩을 하다보면, 비동기와 같은 단어가 등장한다.

    자바스크립트의 작동원리

    자바스크립트는 싱글 스레드 언어가 맞다. 메인스레드가 하나이기 때문이다.

    그래서 한번에 한개의 작업만을 처리하는데, 이것을 동기적이라고 한다. 이러한 특성 때문에 오래걸리는 작업이 콜스택에 걸리게되면, 유저는 느린 작업을 경험하게 된다. 그러나 자바스크립트의 런타임이 이러한 단점을 보완해준다.

    자바스크립트 엔진의 구성

    자바스크립트를 실행시키는 엔진은 브라우저마다 다르다.

    SpiderMonkey : 파이어폭스 / V8 : 크롬 / Webkit : 사파리 / Chakra : 익스플로러, 엣지
    자바스크립트 엔진은 변수와 객체에 대한 메모리를 할당하는 힙, 코드를 따라 call stack을 쌓는 스택으로 구성되어있다.

    자바스크립트 런타임

    웹브라우저는 자바스크립트 엔진 뿐만 아니라 런타임도 탑재하고있다.

    런타임은 자바스크립트에서 처리하지 않는 timer, ajax통신 등을 처리하는 webPI를 제공한다. 그래서 자바스크립트의 call stack에 stack이 쌓이다가, setTimeOut 등의 함수가 실행될 차례에 이를 webAPI에서 처리하고, 동시에 call stack에서는 나머지 작업을 처리한다. webAPI는 완료된 작업을 callback Queue에 보내고, 메인 스택(call stack)이 비워지면 이벤트루프가 콜백큐의 작업을 메인스택으로 보내 실행시킨다.

    자바스크립트의 비동기성은 여기서 발생한다. 덕분에 사용자는 오래걸릴 작업물에 대해 기다리지 않고 빠른 결과물을 확인할 수 있다.

    메인 스택이 비워져야지만 이벤트루프가 메인스택으로 이동시키기 때문에, 작업시간을 보장하지 못한다.
    또, 스택의 크기에는 한계가 있기 때문에, 스택에 무한정 쌓다보면 에러가 발생한다. 따라서 자바스크립트로 개발을 할 때 스택에 많은 것을 쌓지 않도록 해야한다.(단일 스레드이다보니 블로킹의 여지가 있음)

     

     

Designed by Tistory.