파이썬에서
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 이 텅 비어있을때만 올려보냄.