일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 항해99 사전스터디
- 웹 크롤링
- 함수형 프로그래밍 특징
- 자바스크립트 엔진 v8
- 항해99 미니프로젝트
- jwt
- gql restapi 차이
- 항해99
- 항해99 부트캠프
- 알고리즘
- next js
- 리덕스
- 코어자바스크립트
- 리액트
- this
- 리액트 메모
- FP 특징
- js배열 알고리즘
- 실행컨텍스트
- 타입스크립트
- Js module
- 렌더링 최적화
- 리액트 메모이제이션
- JS module system
- toggle-btn
- chromatic error
- 테스트 코드 툴 비교
- 리액트 렌더링 최적화
- v8 원리
- 웹팩 기본개념
- Today
- Total
Jaeilit
자바스크립트의 비동기 프로그래밍 Promise 본문
비동기 프로그래밍의 반대 말은 동기 프로그래밍입니다.
동기 프로그래밍은 순차적으로 위에서 아래로 작성 된 순서대로 코드를 실행하는 프로그래밍법을 이야기하는데요
만약에 동기적으로 프로그래밍을 하다가 시간이 많이 걸리는 작업을 만나면 어떻게 될까요?
브라우저는 이 동기작업이 완료 될때까지 멈춰있게 됩니다.
이런 현상을 방지하고자 비동기적인 프로그래밍이 필요한데 자바스크립트 엔진에서는 브라우저의 웹 API 를 활용하여 비동기 프로그래밍을 할 수 있습니다.
자바스크립트 엔진에는 메모리 힙과 콜 스택이 있습니다.
그 중에서 콜 스택이 비동기 프로그래밍을 가능하게 하는데 어떻게 가능하게 하는지 살펴보겠습니다.
콜 스택에는 함수를 호출하면 함수의 실행 컨텍스트가 순차적으로 스택 구조로 쌓이게 됩니다.
그래서 호출스택(Call Stack) 이라고도 하며 이 실행 컨텍스트가 실행되고 종료되면 사라지게 됩니다.
이 방법은 어디까지나 동기적인 프로그래밍에서 이루어지고 비동기 코드는 웹 API로 위임됩니다.
위임 된 비동기 코드는 실행이 완료되면 Callback Queue 로 비동기 코드의 콜백 함수가 이동하게 되고
동기 코드들을 실행하던 Call stack 이 비어있다면 이 Callback Queue 의 콜백 함수들이 Call Stack 으로 이동하게 되는데 이러한 과정을 이벤트 루프라고 합니다.
큐의 종류
1. 태스크 큐(Task Queue)
- 매크로 태스크 큐라고도 부르며 브라우저나 노드 환경에서 발생하는 이벤트와 콜백함수를 처리하는데 사용되고 setTimeout 이나 setinterval, I/O 작업, UI 이벤트 처리 등이 매크로 태스트 큐에 속합니다.
2. 마이크로 태스크 큐(Micro Task Queue)
- Promise 나 MutationObserver 또는 asycn/await의 콜백들이 여기에 포함됩니다.
큐의 종류는 위의 2가지 외에도 애니메이션 프레임이 존재하는데 실행의 우선순위는 마이크로 태스트큐 -> 애니메이션 프레임 -> 태스크 큐 순서입니다.
또한 이벤트 루프는 마이크로 태스트 큐나 애니메이션을 방문할때는 큐 안에 있는 모든 작업들을 수행하지만 태스크 큐를 방문할때는 한번에 하나의 작업만 call stack 으로 전달하고 다른 queue 를 순회합니다.
예제)
console.log('script start');
setTimeout(function () {
console.log('setTimeout');
}, 0);
Promise.resolve()
.then(function () {
console.log('promise1');
})
.then(function () {
console.log('promise2');
});
console.log('script end');
// script start
// script end
// promise1
// promise2
// setTimeout
실행순서는 아래와 같습니다.
1. 동기 코드가 먼저 실행됩니다. script start, end
2. 마이크로 태스크 큐의 Promise 함수가 실행됩니다. promise1, promise2
3. 태스트 큐의 함수들이 실행됩니다. setTimeout
'TIL' 카테고리의 다른 글
Graphql 과 RESTful API 차이점 (0) | 2024.04.11 |
---|---|
스토리북 chromatic action error (0) | 2024.03.08 |
자바스크립트 V8 엔진 (1) | 2023.10.26 |
번들러 웹팩 (0) | 2023.09.07 |
함수형 프로그래밍 - 고차함수 HOF ( 일급객체 ) (0) | 2023.08.21 |