>웹 프론트엔드 >JS 튜토리얼 >Node.js에서 진정한 비차단 기능을 작성하는 방법은 무엇입니까?

Node.js에서 진정한 비차단 기능을 작성하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-04 19:11:13252검색

How to Write Truly Non-Blocking Functions in Node.js?

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의 실험적인 작업자 스레드 기능을 활용하여 단일 프로세스 내에서 여러 스레드를 만듭니다.
  • 네이티브 코드: 비동기 시스템 호출을 사용하는 C 또는 기타 네이티브 코드 확장을 작성하거나 스레드.
  • 기존 비동기 API: fs.readFile을 사용한 파일 I/O, http.get을 사용한 HTTP 요청 또는 데이터베이스 쿼리와 같이 Node.js 핵심 모듈에서 제공하는 비동기 작업을 활용합니다. mongoose.connect와 함께.

위 내용은 Node.js에서 진정한 비차단 기능을 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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