자바스크립트는 메인 쓰레드 하나와 콜스택 하나로 구성되어 있는 싱글 쓰레드로 동작하는 언어라고 한다.
또한, 비동기 작업을 동시에 할 수 있다고도 한다.
엥? 😳 1번에 1개의 작업만 할 수 있는데, 어떻게 동시에 실행을 할 수 있다는 걸까?
오늘은 이 주제에 대해 알아보려고 한다.
💡 스레드란?
프로세스 내 실행 단위이다. 하나의 경우 싱글 스레드(Single thread), N개일 경우 멀티 스레드(Multi thread)라고 한다. 중요한 건 갯수의 차이가 아니라 작업 방식의 차이이다.
싱글 쓰레드는 첫번째 작업을 시작하고 끝낸 후에 다음 두번째 작업을 처리한다. 멀티쓰레드의 경우에는 두 개의 쓰레드가 두 개의 작업을 짧은 시간 동안 번갈아가며 수행하기 때문에 두 개의 작업이 동시에 처리되는 것처럼 보인다.
자바스크립트의 메인 쓰레드인 이벤트 루프가 싱글 쓰레드이기 때문에 자바스크립트를 싱글 쓰레드 언어라고 부른다. 하지만 이벤트 루프만 독립적으로 실행되지 않고 웹 브라우저나 NodeJS 같은 멀티 쓰레드 환경에서 실행된다. 즉, 자바스크립트 자체는 싱글 쓰레드가 맞지만 자바스크립트의 런타임은 싱글 쓰레드가 아니다.
기존 동기식 요청은 코드를 한 줄 한 줄 차례대로 실행하기 때문에 작업시간 및 자원의 낭비가 심해진다. 하나의 요청이 완료될 때까지 기다리지 않고 동시에 다른 작업을 실행하는 비동기 호출로 극복이 가능하다.
그렇다면 비동기 작업은 어떻게 동작할까?
비동기 작업에 대한 내용은 다음 글에 포스팅 해보겠다.