> 웹 프론트엔드 > JS 튜토리얼 > node.js_node.js의 타이머 nextTick()과 setImmediate() 간의 차이점 분석

node.js_node.js의 타이머 nextTick()과 setImmediate() 간의 차이점 분석

WBOY
풀어 주다: 2016-05-16 16:30:02
원래의
1796명이 탐색했습니다.

1. 노드에서 타이머를 사용할 때의 문제점은 정확하지 않다는 것입니다. 예를 들어 setTimeout()은 작업이 10ms 후에 실행되도록 설정하지만 9ms 이후에는 작업이 5ms를 차지하며 타이머의 경우입니다. 다시 켜세요 , 4ms 지연되었습니다.

그렇습니다. 노드의 타이머에 관한 모든 것입니다.

2. 코드를 보세요:

코드 복사 코드는 다음과 같습니다.

process.nextTick(함수(){
console.log("지연된 실행");
});
console.log("정상실행 1");
console.log("정상실행 2");
console.log("정상실행 3");
console.log("정상실행 4");

이 예제를 보면 nextTick()이 주로 비동기 실행에 사용되는 것이 무엇인지 명확하게 알 수 있을 것 같습니다.

코드 보기:

코드 복사 코드는 다음과 같습니다.

setImmediate(함수(){
console.log("지연된 실행");
});
console.log("정상 실행");

setImmediate도 비동기적으로 실행되는 것을 발견했습니다.

그럼 it과 nextTick()의 차이점은 무엇인가요?

코드 보기:

코드 1:

코드 복사 코드는 다음과 같습니다.

process.nextTick(함수(){
console.log("nextTick 지연")
});
setImmediate(함수(){
console.log("setImmediate Delay");
});
console.log("정상 실행");

결과:

코드 2:

코드 복사 코드는 다음과 같습니다.

setImmediate(함수(){
console.log("setImmediate Delay");
});
process.nextTick(함수(){
console.log("nextTick 지연")
});
console.log("정상 실행");

결과:

코드 순서는 달라도 실행 결과는 같은 것을 발견했습니다.

결과에서 확인할 수 있습니다:

nextTick()의 콜백 함수 실행 우선순위가 setImmediate()보다 높습니다.

process.nextTick()은 유휴 관찰자에 속하고 setImmediate()는 검사 관찰자에 속합니다. 루프 검사의 각 라운드에서 유휴 관찰자는 I/O 관찰자보다 우선하고 I/O 관찰자는 검사보다 우선합니다. .

구체적인 구현 측면에서 process.nextTick()의 콜백 함수는 배열에 저장됩니다.
setImmediate()의 결과는 연결리스트에 저장됩니다.
동작 측면에서 process.nextTick()은 각 주기마다 배열의 모든 콜백 함수를 실행합니다. 그리고 setImmediate()는 매 주기마다 연결리스트의 콜백 함수를 실행합니다.

//nextTick()에 대한 2개의 콜백 함수 추가
process.nextTick(함수(){
console.log("nextTick 지연 실행 1");
});
process.nextTick(함수(){
console.log("nextTick 지연 실행 2");
});
//두 개의 setImmediate() 콜백 함수 추가
setImmediate(함수(){
console.log("setImmediate 지연 실행 1");
Process.nextTick(함수(){
console.log("강력한 삽입");
});
});
setImmediate(함수(){
console.log("setImmediate 지연 실행 2");
});
console.log("정상 실행");

실행 결과를 보면 알 수 있는데, setImmediate()의 첫 번째 콜백 함수가 실행되면 두 번째 콜백 함수가 바로 실행되지 않고 먼저 nextTick()을 다시 setImmediate( )번 누르면 다음 사이클로 들어갑니다. 이렇게 설계한 이유는 각 루프가 빠르게 종료될 수 있도록 하고 CPU가 너무 많이 점유되어 후속 I/O 호출을 차단하는 것을 방지하기 위한 것입니다.

위는 node.js의 타이머 nextTick()과 setImmediate()의 차이점에 대한 정보입니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿