HEAP, STACK, QUEUE, 브라우져 동작원리.

column clash·2021년 8월 19일
0

파이썬에서

print(1+1)
time.sleep(1)
print(2+2)

이러면 잘 2, 1, 4 가 나옴.

자바스크립트에서

console.log(1+1)
setTimeout(function() {}, 1000) (1초 쉬어라)
console.log(2+2) 

당연히 제대로 동작안함. 2,4 가 바로나옴.

console.log(1+1)
setTimeout(function() {console.log(2+2) }, 1000) (1초 쉬어라)

2 1초 쉬고, 4 가 됨.

console.log(1+1)
setTimeout(function() {console.log(2+2) }, 1000) (1초 쉬어라)
console.log(3+3)

2 6 1초쉬고 4 가 나옴.

자바스크립트에선 왜 이럴까?

Stack

console.log(1+1) => 실행완료
consonle.log(2+2) => 그 다음 실행.
console.log(i) => 변수 i 네 변수 i 어딨어?

Heap
i = {age:20} --> 여깄네~
j = {name:"kim"}

Stack 이 코드 실행해주는 곳.
Stack 은 여러개가 없음.
하나밖에 없고, 그래서 한번에 코드 한줄 밖에 실행못함

이걸 'single threaded' language 라고 함.

한줄에 하나밖에 실행하지 못한다고 했는디.

stack
console.log(1+1)
setTimeout(function() {console.log(2+2)}, 1000{
console.log(3+3)

뭐야 쟤는 1초 후에 실행하는 거잖어.
치워버려라

이거는 여기에 집어넣어 실행하지 않는다.

왜냐면 쟤는 1초있다가 실행할건데 자리차지하게 둘거야?
아니잖어.

대기실로 제껴두고, 각 stack 애들 실행.

대기실로 제껴두는 애들
ajax,
이벤트리스너,
setTimeout

따르릉 1초가 지났어요 이제 실행해야할 것 같은데
stack으로 보내야겠군.

Queue 대기실 (콜백 큐, 이벤트큐라고 불림)
대기끝난 코드1, 대기끝난 코드2, 대기끝난 코드3

여기서 stack으로 하나씩 올려보냄.

stack 으로 바로 보내지 않은 이유는, stack 은 원래 바쁜공간이라그럼.

조건은
stack 이 텅 비어있을때만 올려보냄.

profile
풀스택 개발 중...

0개의 댓글