Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 페이지클론
- Non-Blocking
- 정보처리기사
- 콜백함수this
- blockchain
- ERC-721
- 카카오홈페이지클론
- 솔리디티
- web3.js
- solidity
- 2021정보처리기사실기
- ERC721
- it5
- it5분잡학사전
- 이더리움
- node.js
- ETH
- 정보처리기사실기요약
- github
- 비트코인
- 정보처리기사실기
- 카카오페이지클론
- Klaytn
- React
- npm
- 블록체인
- 노마드코더
- 노개북
- 클레이튼
- git
Archives
- Today
- Total
Be lazy, Be crazy
이벤트 루프 [event loop] 본문
728x90
반응형
이 글에서는 javaScript가 어떻게 동작하는지 그리고 이벤트루프는 무엇인지 알아봅시다.
js언어를 사용해 코딩을 하면서 주먹구구식으로 코드를 작성해서 기능이 동작하는데 초점을 맞추다 보니 사용하는 언어에 대해서 동작방식을 소홀히 여기게됬다. 그러나 조금 더 좋은 코드를 작성하고 싶어서 동작방식에 대해서 공부를 하게 되었다.
출처는 유튜브 https://www.youtube.com/watch?v=QFHyPInNhbo&t=66s 영상을 보시면 아주 도움이 될것같습니다.
Memory Heap => 메모리 할당이 일어나는 곳
Heap => 구조화 되지 않은 넓은 메모리 영역 | 객체(변수,함수 등)들이 담긴다.
Call Stack(호출스택) => 실행될 코드의 한 줄 단위로 할당된다.
자바스크립트는 인터프리터 언어로써 한 줄씩 실행된다.
Web APIs (node에서는 백그라운드로 설명된다.) => 비동기처리를 담당한다.
Callback Queue (Task Queue, Event Queue 등 다양한 형태로 설명된다.)
=> 비동기 처리가 끝난 후 실행되어야할 콜백 함수가 차례로 할당된다.
Event Loop => Queue에 할당된 함수를 순서에 맞춰 Call Stack에 할당해 준다.
먼저 위와같은 사진에서 함수를 실행하게되면 Call Stack에 어떻게 쌓이는지 확인할 수 있는 대목이다.
Call Stack사이즈(한계점)를 넘어가면 발생하는 오류이다.
브라우저, 엔진마다 한계점이 다르고 일반적으로 1만개, 크롬은 12만개라고 알고 있으면 된다.
정말 중요한 부분은 이부분이다. 비동기함수를 사용할 때 어떻게 동작하는지 확인해야합니다.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
위에 사진을 토대로 순서대로 설명을 해보겠습니다.
1. 콜스택에 anonymous(모든 코드를 가지고 있는 존재)가 먼저 올라가고 다음 console.log('시작')이 올라갑니다.
2. 그러면 시작이 출력되고 비동기 함수가 Call Stack에 올라갑니다.
3. 비동기함 수를 처리해주는 Web APIs로 넘어가게 됩니다.
4. 다음 밑에있는 console.log('끝')이 출력되게 됩니다.
5. Web APIs에서 3초가 지나면 Callback Queue로 넘어가게됩니다.
6. 이 부분이 중요합니다. Event Loop가 Call Stack이 비어있다면 Callback Queue값을 넘겨 줍니다.
7. 비동기함수에 있떤 콜백함수가 사용되게됩니다. 그럼으로써 console.log("중간")이 출력됩니다.
이벤트루프가 콜스택을 검사해서 비어있으면 콜백큐에 있는 함수를 콜스택에 보내줘서 콜백함수에 있는 실행되어야하는 부분을 콜스택에 쌓아서 실행을 하게 됩니다.
이제 위와 같은 사진을 보면 동작방식을 이해할 수 있을 거라고 생각합니다.
여기서 고민해 봐야하는 점은 Promise자체는 동기입니다. 그러나 then을 만나는 순간 비동기로 동작하게 됩니다.
이제 기본적으로 Call Stack에서 처리를 다하고 Callback Queue만 남겨놓았는데요
Queue자료구조이기 때문에 선입선출구조로써 익명-timeout이 먼저 실행될 것이라고 생각하는데요 then을 먼저 사용하게됩니다.
여기서 우선순위가 작용하기 때문입니다.
정상적으로 함수가 작동하면 아래와같이 출력 됩니다.
우선순위에 대한 자료는 아래와 같습니다.
오늘은 자바스크립트가 어떻게 작동하는지 공부를 해보았습니다.
저와같이 무작정 코드를 작성하시다가 동작원리를 이해해서 조금 더 좋은 코드를 작성하고 싶은 분들을 위해서 블로그를 남깁니다.
아래 퀴즈를 납깁니다. 블로그를 읽고 이해가 충분히 되신분들이라면 아래 접은글을 통해서 퀴즈를 맞춰보면 다시한번 이해하는데 도움이 될거라고 생각됩니다.
반응형
'JavaScript' 카테고리의 다른 글
SPA이란? - SPA, MPA 비교, 장단점 (0) | 2021.11.13 |
---|---|
SSR vs CSR 비교 (0) | 2021.11.12 |
[React] JSX 문법 왜 쓰는걸까? (1) | 2021.10.26 |
[React] 빠르게 React 개발환경 셋팅하기 (2021 버전) (0) | 2021.10.26 |
[React] 리액트(React)를 공부해야하는 이유에 대해 (1) | 2021.10.26 |
Comments