Skip to content

Commit 4ee7d3a

Browse files
authored
Create [JavaScript] 자바스크립트 비동기 런타임 과정.md
1 parent 0afddd0 commit 4ee7d3a

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Javascript
2+
3+
## 자바스크립트 비동기 런타임 과정
4+
5+
![1.png](https://image.toast.com/aaaabcy/post/16093411084241.png)
6+
7+
* Call stack
8+
* 자바스크립트에서 수행해야 할 함수들을 순차적으로 스택에 담아 처리
9+
* Web API
10+
* 웹 브라우저에서 제공하는 API
11+
* ajax나 timeout 등의 비동기 작업을 실행
12+
* Task Queue
13+
* callback queue라고도 하며 Web API에서 넘겨받은 callback 함수를 저장
14+
* Event Loop
15+
* Call stack이 비어있다면 Task Queue의 작업을 Call stack으로 옮김
16+
17+
### 실제 코드 예시
18+
19+
```javascript
20+
setTimeout(() => console.log('async'));
21+
console.log('not timeout');
22+
23+
// not timeout
24+
// async
25+
```
26+
27+
1. setTimeout 함수가 실행되며 Call stack에 setTimeout 함수가 추가
28+
2. setTimeout 함수는 javascript 엔진이 처리하지 않고 Web API가 처리 (NodeJS의 경우 Timers 모듈이 처리) => 요청한 시간이 지나면 Task Queue로 callback 함수를 전달
29+
3. `console.log('not timeout')` 이 call stack에 추가된 후 call stack의 `console.log('not timeout')` 가 실행
30+
4. 자바스크립트의 Event loop는 call stack이 비어있는지 항상 확인, call stack이 비워진 것을 확인한 event loop는 task queue에 있던 callback 함수를 call stack으로 옮겨 작업 수행
31+
32+
33+
34+
### 참고
35+
36+
* https://chanyeong.com/blog/post/44
37+
* https://chanyeong.com/blog/post/33
38+
39+
40+
41+
42+

0 commit comments

Comments
 (0)