자바스크립트 == 싱글 스레드 프로그래밍 언어
- 여기서 말하는 스택은 어떤 프로그램의 코드가 어떤 순서로 실행되는지 기록하는 작업 스케줄링과 관련된 자료구조이다. 일단 어떤 함수를 실행하면 그 함수가 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
'프로그래밍 언어 > Javascript' 카테고리의 다른 글
Javascript) http에서 클립보드 쓰기 기능 사용하기 (0) | 2021.12.01 |
---|---|
Javascript) 자바스크립트의 핵심 원리 : 실행 컨텍스트 Execution Context (0) | 2021.11.30 |
Javascript) Web Storage (0) | 2021.11.29 |
Javascript) this 용법 (0) | 2021.11.29 |
Javascript) undefined vs null (0) | 2021.11.29 |