로딩
요청 처리 중입니다...

자바스크립트 이벤트 루프, 알고 보면 단순하다

 자바스크립트 이벤트 루프, 알고 보면 단순하다

자바스크립트는 '싱글 스레드'다. 말 그대로 한 번에 하나의 일만 처리한다.

그런데 브라우저를 보면 이상하다. API도 호출하고 버튼 클릭도 받고 애니메이션도 돌고 타이머도 작동한다 겉으로 보면 여러 일이 동시에 돌아가는 것처럼 보인다.

그래서 처음엔 이런 생각이 든다. “어?

싱글 스레드라며?” 이 비밀은 자바스크립트 엔진이 아니라 브라우저와 이벤트 루프에 있다.

엔진은 생각보다 단순하다 자바스크립트 엔진(V8 같은 것)은 사실 별거 안 한다. 그냥 명령어 읽고 실행한다.

함수 호출 → Call Stack에 쌓는다 위에서부터 하나씩 실행한다 끝이다. 정말로 그게 전부다.

그래서 여기서 무거운 계산을 돌리면 어떻게 될까? while(true) {} 브라우저가 그냥 멈춘다.

우리가 흔히 말하는 "브라우저 렉"이 바로 이 상황이다. 엔진은 다른 일을 할 능력이 없다.

지금 하는 일 끝날 때까지 계속 그것만 한다. 정말로 한 놈만 팬다.

시간이 걸리는 일은 브라우저에게 넘긴다 그래서 자바...