자바스크립트는 싱글 스레드 언어입니다, 그래서 한 번에 한 줄만 코드를 실행하며, 실행해주는 곳은 Stack입니다.
바로 처리할 수 없는 코드(예 : setTimeout, Ajax 요청 코드, 이벤트 리스너)는 잠깐 대기실에 넣습니다,
한 번에 한 줄만 실행가능한데 접시처럼 쌓여있는 스택에 계속해서 둘 수는 없으니까요.
그럼 이 대기실에서 다시 순서대로 Queue라는 공간으로 이동시킵니다, 그럼 Queue에서 다시 Stack으로 옮기게 되는겁니다.
즉 Stack ->바로 실행못하는 얘들은 대기실로 -> 순서대로 Queue로 ->⭐️Stack이 비어있을때만 다시 Stack으로
그리하여 자바스크립트에서는 어려운 수학연산(오래 걸리는)같은걸 시키면 안됩니다. 만약 오래걸리는 작업을 Stack에서 수행하고 있는데
버튼을 누르면 모달창이 뜨는 과정과 같이, 만약 연산 중에 사용자가 버튼을 누르는 경우에 버튼을 눌렀으니 모달창을 띄어줘하는
리퀘스트는 Queue에 있는 상태입니다. 왜냐구요 ? 현재 오래 걸리는 작업을 아직 Stack에서 하고 있으니까요.
Queue에서 Stack으로 다음 작업을 넘기는 방식은 ⭐️Stack이 비어있을때만입니다.
Q.그러면 해결책은 어떻게 됩니까?
A.Web worker를 이용하면 됩니다.
다른 JS파일을 이용해서 해당 파일에서 힘든 연산을 시키고 완료가 되면 그때 값을 가져오라고 명령하면 됩니다.
이미 생성된 Worker라는 Class를 사용하면 됩니다.
Main.js 파일
var myWorker = new Worker('worker.js');
w.onmessage = function(e){
console.log(e.data)
};
(worker.js 파일)
let i = 0;
postMessage(i + 1);//postMessage라는 특별한 함수가 있음
이렇게 설정해놓으면 worker.js에서 작업이 끝나면 postMessage()이렇게 실행하여 다른 파일로 완료된 값을 전달해줄 수 있습니다.