이론은 이제 코드의 모습을 보자. 당신은 당신이 원하는대로 대체로 수행하거나 소스 코드를 다운로드 할 수 있습니다.
<code class="language-javascript">setTimeout( () => console.log('Hi from the callback queue'), 5000); // 保持循环活动这么长时间 const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {}</code>thenable <🎜
를 만들어 주 루프에서 제거합니다. 기다린 후에 나타나는 것은 콜백을 통해 비 차단 작업으로 간주 될 수 있습니다.
전체 공개 : 위의 코드는 데모 목적으로 만 사용됩니다. 실제 코드에서는 Fs.ReadFile을 사용하는 것이 좋습니다. 이는 약속 주위에 포장 될 수있는 콜백을 트리거합니다. 전체 의도는 기본 루프에서 I/O 제거를 차단하므로 유효합니다.
<<> 그림 출처 : libuv 문서
<code class="language-javascript">setTimeout( () => console.log('Hi from the callback queue'), 5000); // 保持循环活动这么长时间 const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {}</code>
<-st> 단계별 데모 <🎜 🎜>
<code class="language-javascript">const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {} // 这需要 7 秒才能执行 setTimeout(() => console.log('Ran callback A'), 5000);</code>
그림 출처 : libuv 문서
<code class="language-javascript">const fs = require('fs'); const readFileSync = async (path) => await fs.readFileSync(path); readFileSync('readme.md').then((data) => console.log(data)); console.log('The event loop continues without blocking...');</code>네트워크 I/O의 경우, 이벤트 루프는 기본 스레드 내에서 폴링합니다. 이 스레드는 다른 스레드와 컨텍스트 스위치가 없기 때문에 스레드 안전이 아닙니다. 파일 I/O 및 DNS 쿼리는 플랫폼에 따라 다르므로 방법은 스레드 풀에서 실행하는 것입니다. 한 가지 아이디어는 위의 코드와 같이 스레드 풀에 들어가는 것을 피하기 위해 DNS 쿼리를 직접 수행하는 것입니다. 예를 들어 LocalHost 대신 IP 주소를 입력하면 풀에서 조회가 제거됩니다. 스레드 풀에서 사용 가능한 스레드 수는 제한되어 있으며 UV_THREADPOOL_SIZE 환경 변수를 통해 설정할 수 있습니다. 기본 스레드 풀 크기는 약 4입니다.
요약
> 루프가 계속되기 전에 네트워크 I/O가 오류, 정리 또는 재 시도 요청을 처리하도록 허용합니다.
node.js 이벤트 루프에 대한 FAQS
<code class="language-javascript">setTimeout( () => console.log('Hi from the callback queue'), 5000); // 保持循环活动这么长时间 const stopTime = Date.now() + 2000; while (Date.now() < stopTime) {}</code>
이벤트 루프에서"진드기 "는 무엇입니까? "진드기"는 이벤트 루프의 단일 반복을 나타냅니다. 각 진드기에서 이벤트 루프는 보류중인 이벤트를 확인하고 실행할 준비가 된 콜백을 실행합니다. 진드기는 node.js 응용 프로그램의 기본 작업 단위입니다.
위 내용은 Node.js Event Loop : 개발자의 개념 및 코드 안내서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!