>웹 프론트엔드 >JS 튜토리얼 >Node.js에서 비차단 기능을 올바르게 구현하려면 어떻게 해야 합니까?

Node.js에서 비차단 기능을 올바르게 구현하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-09 10:10:09335검색

How Can I Correctly Implement Non-Blocking Functions in Node.js?

Node.js에서 비차단 기능의 올바른 구현

오해에도 불구하고 단지 코드를 Promise에 래핑한다고 해서 Non-Blocking 기능이 렌더링되는 것은 아닙니다. -블로킹. Promise 실행자 함수는 본질적으로 동기식이므로 실행을 차단합니다. 이것이 다음 줄을 인쇄하기 전에 제공된 코드에서 지연이 관찰되는 이유입니다.

제공된 코드의 문제

코드가 처음에는 비차단으로 나타납니다. , Promise를 활용하여 계산 집약적인 longRunningFunc의 결과를 반환합니다. 그러나 실행 시 두 번째와 세 번째 줄이 인쇄되기 전에 지연이 관찰되며 이는 프로그램이 Promise가 해결되기를 기다리고 있음을 나타냅니다.

Node.js의 진정한 비차단 코드

Node.js에서 진정한 비차단 코드를 생성하려면 몇 가지 방법이 있습니다. 옵션:

  • 하위 프로세스: 별도의 하위 프로세스에서 코드를 실행하고 완료 시 비동기 알림을 받습니다.
  • 작업자 스레드(Node. js v11 ): Node.js에 도입된 실험적인 작업자 스레드 활용 v11.
  • 네이티브 코드 추가 기능: libuv 또는 OS 수준 스레드를 활용하여 맞춤형 네이티브 추가 기능을 개발합니다.
  • 기존 비동기 API 활용: 기존 비동기 API를 기반으로 구축하여 기본 프로세스에서 장기간 코드 실행을 방지합니다. thread.

예제 수정

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.