1. 노드에서 타이머를 사용하는 데있어 문제는 정확하지 않다는 것입니다. 예를 들어, settimeout ()는 10ms 이후에 실행되도록 작업을 설정하지만 9ms 이후에는 작업이 5ms를 취합니다. 타이머가 다시 회전하면 4ms 만 지연되었습니다.
글쎄, 노드의 타이머에 대해 할 말이 너무 많습니다.
2. 코드를보십시오.
코드 사본은 다음과 같습니다.
process.nexttick (function () {
Console.log ( "지연 실행");
});
Console.log ( "정상적으로 실행");
Console.log ( "일반 실행 2");
Console.log ( "일반 실행 3");
Console.log ( "일반 실행 4");
이 예를 통해 모든 사람이 NextTick ()가 사용되는 것을 명확하게 볼 수 있다고 생각합니다. 주로 비동기 실행에 사용됩니다.
코드보기 :
코드 사본은 다음과 같습니다.
setimmediate (function () {
Console.log ( "지연 실행");
});
Console.log ( "일반 실행");
우리는 setimmediate도 비동기 적으로 실행된다는 것을 발견했습니다. 이상합니다
그렇다면 그것과 NextTick ()의 차이점은 무엇입니까?
코드보기 :
Code 1:
코드 사본은 다음과 같습니다.
process.nexttick (function () {
Console.log ( "NextTick Delay")
});
setimmediate (function () {
Console.log ( "setimmediate Delay");
});
Console.log ( "일반 실행");
결과:
Code 2:
코드 사본은 다음과 같습니다.
setimmediate (function () {
Console.log ( "setimmediate Delay");
});
process.nexttick (function () {
Console.log ( "NextTick Delay")
});
Console.log ( "일반 실행");
결과:
코드 시퀀스가 다르지만 실행 결과는 동일하다는 것을 알았습니다.
결과에서 우리는 다음을 찾을 수 있습니다.
NextTick ()의 콜백 함수 실행 우선 순위는 setimmediate ()보다 높습니다.
process.nexttick ()는 유휴 관찰자에 속하며 setimmediate ()는 check Observer에 속합니다. 각 루프 검사 라운드에서 유휴 관찰자는 I/O 관찰자보다 앞서 있으며 I/O 관찰자는 체크 관찰자보다 앞서 있습니다.
특정 구현에서 Process.nextTick ()의 콜백 함수는 배열에 저장됩니다.
setimmediate ()의 결과는 링크 된 목록에 저장됩니다.
동작 측면에서 Process.nextTick ()은 각 루프의 배열에서 모든 콜백 함수를 실행합니다.
setimmediate ()는 각 루프의 링크 된 목록에서 콜백 함수를 실행합니다.
코드 사본은 다음과 같습니다.
// 2 개의 NextTick () 콜백 함수를 추가합니다
process.nexttick (function () {
Console.log ( "NextTick 지연 실행 1");
});
process.nexttick (function () {
Console.log ( "NextTick Delay Execution 2");
});
// 두 개의 setImmediate () 콜백 함수를 추가합니다
setimmediate (function () {
console.log ( "setimmediate 지연 실행 1");
process.nexttick (function () {
Console.log ( "강한 삽입");
});
});
setimmediate (function () {
console.log ( "setimmediate 지연 실행 2");
});
Console.log ( "일반 실행");
실행 결과에서 첫 번째 setimMediate () 콜백 함수가 실행되면 두 번째 SetImmediate () 콜백 함수는 즉시 실행되지 않고 다음 루프 라운드에 들어가서 NextTick () 우선 순위 및 setimmediate () 시간의 순서로 다시 실행된다는 것을 알 수 있습니다. 이 설계의 이유는 각 루프를 빠르게 실행하고 CPU가 너무 많이 소비하고 후속 I/O 통화를 차단하지 못하도록하기 때문입니다.
위는 Node.js의 NextTick ()과 Setimmediate ()의 차이에 대한 정보입니다. 그들 사이의 차이에 대해 분명합니까?