나는 그것에 대해 생각하고 있으며 이것이 내가 생각해 낸 것입니다.
아래 코드를 보자 :
console.clear();
console.log("a");
setTimeout(function(){console.log("b");},1000);
console.log("c");
setTimeout(function(){console.log("d");},0);
요청이 들어오고 JS 엔진이 위의 코드를 단계별로 실행하기 시작합니다. 처음 두 통화는 동기화 통화입니다. 그러나 setTimeout
메소드에 관해서 는 비동기 실행이됩니다. 그러나 JS 즉시에서 반환하고 호출되는, 실행을 계속 Non-Blocking
하거나 Async
. 그리고 다른 작업을 계속하고 있습니다.
이 실행 결과는 다음과 같습니다.
acdb
따라서 기본적으로 두 번째 setTimeout
가 먼저 완료되고 콜백 함수가 첫 번째보다 먼저 실행되므로 의미가 있습니다.
여기서는 단일 스레드 응용 프로그램에 대해 이야기하고 있습니다. JS Engine은이를 계속 실행하며 첫 번째 요청을 완료하지 않으면 두 번째 요청으로 이동하지 않습니다. 그러나 좋은 점은 setTimeout
해결 과 같은 블로킹 작업을 기다리지 않으므로 새로운 수신 요청을 수락하므로 더 빠릅니다.
그러나 내 질문은 다음 항목과 관련하여 발생합니다.
# 1 : 단일 스레드 응용 프로그램에 대해 이야기 setTimeouts
하는 경우 JS 엔진이 더 많은 요청을 수락하고 실행하는 동안 어떤 메커니즘이 처리 됩니까? 단일 스레드가 다른 요청에서 어떻게 계속 작동합니까? setTimeout
다른 요청이 계속 들어 와서 실행되는 동안 작동 하는 것.
# 2 :setTimeout
더 많은 요청이 들어오고 실행되는 동안 이러한 기능이 백그라운드에서 실행되면 백그라운드에서 비동기 실행이 수행되는 것은 무엇입니까? 우리가 말하는 것은 무엇입니까 EventLoop
?
# 3 : 그러나 EventLoop
모든 것이 실행되고 콜백 메소드가 호출되도록 전체 메소드를 넣지 않아야 합니까? 이것이 콜백 함수에 대해 이야기 할 때 이해하는 것입니다.
function downloadFile(filePath, callback)
{
blah.downloadFile(filePath);
callback();
}
그러나이 경우 JS 엔진은 콜백을 EventLoop
? 에 넣을 수 있도록 비동기 함수인지 어떻게 알 수 있습니까? 아마도 async
C # 의 키워드 또는 JS 엔진이 취할 메소드를 나타내는 속성의 일종과 같은 것이 비동기 메소드이므로 적절하게 처리해야합니다.
# 4 : 그러나 기사 는 일이 어떻게 진행 될지에 대해 내가 추측 한 것과는 매우 반대라고 말합니다.
이벤트 루프는 콜백 함수 대기열입니다. 비동기 함수가 실행되면 콜백 함수가 큐로 푸시됩니다. JavaScript 함수는 비동기 함수가 실행 된 후 코드가 실행될 때까지 이벤트 루프 처리를 시작하지 않습니다.
# 5 : 이 이미지가 도움이 될 수 있지만 이미지의 첫 번째 설명은 질문 번호 4에서 언급 한 것과 정확히 같은 내용입니다.
그래서 내 질문은 위에 나열된 항목에 대한 설명을 얻는 것입니다.