본문 바로가기

프로그래밍 언어/Javascript

Javascript) Event Loop 비동기 콜백, 자바스크립트 동작 원리

자바스크립트 == 싱글 스레드 프로그래밍 언어
  • 여기서 말하는 스택은 어떤 프로그램의 코드가 어떤 순서로 실행되는지 기록하는 작업 스케줄링과 관련된 자료구조이다. 일단 어떤 함수를 실행하면 그 함수가 stack 에 push되어 stack의 맨위에 쌓이게 된다. 글고 이 함수가 어떤 값을 리턴하거나 실행을 종료하면 그 함수를 다시 스택에서 pop하여 꺼낸다. 
  • 자바스크립트는 이 코드를 스케줄링하는 스택이 하나뿐이기 때문에 한 번에 하나의 작업만 처리할 수 있어서 싱글 스레드 언어라고 하는 것이다. 
  • 그렇다면 자바스크립트는 병렬처리를 할 수 없는 것인가? NO! 
  • 그래서 나온 것이 비동기 콜백! Asynchronous Callback 

 

비동기 콜백 Asynchronous Callback

  • 자바스크립트가 브라우저 엔진에 의해 실행될 때 기본적으로 함수는 동기적으로 호출되어 call stack에 차곡차곡 쌓여 순차적으로 실행된다. 
  • 이때 ajax, settimeout, addEventListener 등의 시간이 걸려 전체 코드 실행에 블로킹이 발생하는 함수를 만나면 이 함수는 callback stack에서 브라우저가 제공하는 Web APIs로 보내고, 해당 함수가 실행되어야 할 순간에 순차적으로 callback queue에 적재한다. 
  • callback queue에 들어간 함수들은 stack이 빈 상태가 되면 순차적으로 스택에 push되어 실행되고 pop된다
  • 여기서 핵심은 아무리 스케줄링을 잘하고 순차적으로 빠르게 실행해도 자바스크립트는 오직 한 번에 하나의 작업만 처리할 수 있다는 것! 

 

 


References