우리가 알고있던 setTimeout,setInterval 은 올바르지 않다??
왜인감...??
먼가 로직이 순서대로 실행되질않는다.
0초뒤에 실행되도록 했는데도???
알려면 자바스크립스의 원리를 알아야한다.
스택구조(리포구조) 큐우구조(피포구조) 생각해보자.
스택 = 콜스택
큐 = TaskQueue
함수실행하면 할일이 콜스택에 쌓이는데 setTimeout 빼놓고 쌓고 setTimeout는 큐에 넣음
그럼 콜스택 다실행하고비면 테스크큐에있는애들을 실행하게됨
테스크 큐로 가게되는 애들은 webAPI Background setTimeout
요 동글동글한 로직을 루프 라고 함,
일꾼 = 쓰레드/이벤트루프 쓰레드/싱글이벤트루프스레드 라고 부름
테스크 큐는 메크로 테스크 큐와 마이크로 테스크 큐 로 나뉨
이건 내일 알아보고
프로세스와 쓰레드
쓰레드가 하나면 일이 다끝날때까지 다른일을 할수가 없어져버려서 문제
그래서 자바스크립트는 이벤트 루프라는것으로 이 상황을 해결한것
다른언어의 경우에는 스레드를 여러개 만듬!(동시에 하는것처럼보임)
하지만 엄밀히 이야기하면 동시에 처리하는것이 아님.
결국 일은 CPU가 하니까!
일꾼이 네개가 서로 비슷하게 처리되는것 으로 빠르니까 동시에 하는것 처럼 보이는것!
1번 일꾼 10%하면 그만해 하고 2번 일꾼한테일시키고를 반복하는것
근데 10%하고 저장을 해야할것이고 2번일꾼으로 옮겨가갸하잖아?(context-swiching)
(싱글스레드)이벤트 루프의 구조상 혼자만 돌아감
(멀티스레드)일꾼여럿을 번갈아가며 사용해서 비슷한 시기에 일을 끝내게 하는 방식
만약 완벽히 똑같이 동시에 일을 시키고있으면 CPU를 여러개 해서 하나에 하나의 일꾼을 넣어주면 되긴함(병렬 CPI)