나는 비 블로킹/비동기 함수를 생성하기 위해 setTimeout
을 사용하는 것이 중요하다고 언급 한 기사를 읽었습니다. 그리고 나는 setTimeout
에 전달 된 함수가 백그라운드에서 실행된다고 생각했습니다. 그런 다음 다른 기사에서 setTimeout
은 함수가 실행될 때 이벤트 루프를 차단합니다. 그래서, 다음과 같은 함수를 테스트 해 보았습니다. 1000MS 통과하고 기능을 실행하는 시간 때setTimeout blocks eventloop
function getit(cb) {
var i = 0;
setTimeout(function() {
while (i < 200000) { i++; console.log(i); }
cb(i);
} , 1000);
console.log(i);
}
getit(function(message) { console.log(message); });
분명히, 스레드가 차단 및 브라우저가 정지됩니다. 내 질문은, 비동기 코드가 스레드를 차단하도록되어 있지 않은 경우, 시간이 지났을 때 함수가 실행 중일 때 어떻게 가능하고 배경이 아닌지? 이것은 단지 지연 일 뿐인 것처럼 보이지만 결국 함수는 한 줄씩 실행되고 어쨌든 루프를 차단합니다. 내가 놓치거나 혼란에 빠진 것이 있습니까?
'setTimeout()'은 나중에 실행될 함수를 대기열에 올려 놓고 * current * 함수의 실행을 차단하지 않습니다. 그것은 "배경"에 대기중인 기능을 실행하거나 그것에 대한 새 스레드를 만들지 않습니다. (당신이 브라우저가 멈추는 것을 말한다면, node.js 태그는 무엇입니까?) – nnnnnn
https://nodesource.com/blog/understanding-the-nodejs-event-loop/ – Sreevisakh
그러나 스레드가 실행될 때 스레드를 차단합니까? 주어진 코드에서 보여주는 것처럼? 나는 그것이 현재 실행을 차단하지 않는다는 것을 이해하지만 setTimeout 내부에서 함수를 실행할 시간이되면 스레드를 차단합니까? 이 기능이 실행되는 동안 다른 기능을 실행할 수 없습니다. –