Node.js에서 비차단 기능의 올바른 구현
오해에도 불구하고 단지 코드를 Promise에 래핑한다고 해서 Non-Blocking 기능이 렌더링되는 것은 아닙니다. -블로킹. Promise 실행자 함수는 본질적으로 동기식이므로 실행을 차단합니다. 이것이 다음 줄을 인쇄하기 전에 제공된 코드에서 지연이 관찰되는 이유입니다.
제공된 코드의 문제
코드가 처음에는 비차단으로 나타납니다. , Promise를 활용하여 계산 집약적인 longRunningFunc의 결과를 반환합니다. 그러나 실행 시 두 번째와 세 번째 줄이 인쇄되기 전에 지연이 관찰되며 이는 프로그램이 Promise가 해결되기를 기다리고 있음을 나타냅니다.
Node.js의 진정한 비차단 코드
Node.js에서 진정한 비차단 코드를 생성하려면 몇 가지 방법이 있습니다. 옵션:
예제 수정
Promise에 코드를 래핑하는 것만으로는 비차단 동작에 충분하지 않지만 setTimeout()을 사용하여 예약할 수 있습니다. 나중에 실행하기 위한 for 루프:
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); }); }
이 접근 방식은 for 루프의 타이밍을 이동하여 다음을 제공합니다. 논블로킹 동작의 출현. 그러나 for 루프는 일단 예약되면 여전히 동기적으로 실행된다는 점에 유의하는 것이 중요합니다. 진정한 비차단 코드를 얻으려면 앞서 설명한 기술 중 하나를 사용해야 합니다.
위 내용은 Node.js에서 비차단 기능을 올바르게 구현하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!