자바스크립트 이벤트 루프에 대해
- JS = 싱글스레드프로그래밍언어 , 런타임
- 런타임시 한번에 하나의 코드 실행가능
- webAPI들이 여러 스레드처리를 해준다(setTimeout, AJAX…)
- 콜스택 = js의 영역, 호출되는 메소드들은 콜 스택에 저장되게 되고 팝하면서 실행
- 블로킹
- 자바스크립트는 싱글 스레드로 동작. 네트워크 요청과 같은 느린 작업시 작업동안 콜 스택은 블로킹됨 다른 브라우저 작업 할 수없다.
- 유동적인 ui의 웹을 구현하는데 제약.
- 비동기 콜백
- timeout이나 AJAX 같은 webAPI종류들은 같은 방식으로 동작하게 된다. JS런타인에서 실행되는게 아닌 브라우저에의해 실행되며 그동안 JS에서는 다른 코드가 실행 가능하다.
- code -> stack(비동기 호출) -> webAPI(browser) -> task queue -> event loop에 의해 -> stack(콜백 호출)
- SetTimeout의 예
- js코드에서 setTimeout로 3초 후 hello() 함수를 호출하라는 명령.
- 콜 스택에서는 이 setTimeout을 실행
- webAPI영역의 브라우저에서 setTimeout 기능을 수행.(3초를 센다.)
- setTimeout 함수에서 명시한 hello()함수는 task큐로 이동되고
- 이벤트 루프는 이 task큐에 작업이 들어온것을 인식, 콜 스택으로 보내어지며, hello() 콜백함수는 실행되어 진다.
- 태스크큐에서 스택으로 전달될 때는 스택이 완전히 비워지고 난 후이다.
- 스택을 비우기 위해 setTimeout(0)가 사용됨
- 이벤트 루프 - 콜 스택과 테스크 큐를 주시, 이벤트 루프는 태스크 큐에 존재하는 작업을 콜 스택에 전달함.
댓글
댓글 쓰기