Node.js에서 비차단 기능을 작성하는 올바른 방법
비차단 패러다임은 Node.js에서 목표 달성에 매우 중요합니다. 고성능. 그러나 이벤트 루프의 진행을 방해하지 않는 진정한 비차단 기능을 작성하는 것은 어려울 수 있습니다.
비차단 동작 이해
프라미스에 코드 래핑 본질적으로 비차단으로 만들지는 않습니다. Promise 실행기 함수는 동기식으로 실행됩니다. 즉, 그 함수 내에서 장기 실행 코드가 다른 작업의 실행을 차단합니다.
예: Promise-Wrapped 차단 함수
고려하세요. 다음 함수:
function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { let sum = 0; for (let i = 0; i < 100000; i++) { for (let j = 0; j < val; j++) { sum += i + j % mod; } } resolve(sum); }); }
이 함수는 Promise를 반환하지만 실행기 내의 코드가 차단 중입니다. 이벤트 루프는 다른 작업을 실행하기 전에 이 코드가 완료될 때까지 기다립니다.
setTimeout을 사용하여 비동기성 시뮬레이션
이 경우 비차단 동작을 에뮬레이트하는 한 가지 접근 방식은 다음을 사용하는 것입니다. setTimeout:
function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { setTimeout(() => { let sum = 0; for (let i = 0; i < 100000; i++) { for (let j = 0; j < val; j++) { sum += i + j % mod; } } resolve(sum); }, 10); }); }
이 코드는 장기 실행 루프가 일정 시간 후에 실행되도록 예약합니다. 10밀리초 지연. 그러나 지연된 실행 기간 내에 여전히 차단됩니다.
진정한 비 차단 접근 방식
진정한 비 차단 기능을 만들려면 코드를 이동하는 기술을 사용해야 합니다. 기본 Node.js 스레드 외부에서 실행:
위 내용은 Node.js에서 진정한 비차단 기능을 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!