1. 노드에서 타이머를 사용할 때의 문제점은 정확하지 않다는 것입니다. 예를 들어 setTimeout()은 작업이 10ms 후에 실행되도록 설정하지만 9ms 이후에는 작업이 5ms를 차지하며 타이머의 경우입니다. 다시 켜세요 , 4ms 지연되었습니다.
그렇습니다. 노드의 타이머에 관한 모든 것입니다.
2. 코드를 보세요:
이 예제를 보면 nextTick()이 주로 비동기 실행에 사용되는 것이 무엇인지 명확하게 알 수 있을 것 같습니다.
코드 보기:
setImmediate도 비동기적으로 실행되는 것을 발견했습니다.
그럼 it과 nextTick()의 차이점은 무엇인가요?
코드 보기:
코드 1:
결과:
코드 2:
결과:
코드 순서는 달라도 실행 결과는 같은 것을 발견했습니다.
결과에서 확인할 수 있습니다:
nextTick()의 콜백 함수 실행 우선순위가 setImmediate()보다 높습니다.
process.nextTick()은 유휴 관찰자에 속하고 setImmediate()는 검사 관찰자에 속합니다. 루프 검사의 각 라운드에서 유휴 관찰자는 I/O 관찰자보다 우선하고 I/O 관찰자는 검사보다 우선합니다. .
구체적인 구현 측면에서 process.nextTick()의 콜백 함수는 배열에 저장됩니다.
setImmediate()의 결과는 연결리스트에 저장됩니다.
동작 측면에서 process.nextTick()은 각 주기마다 배열의 모든 콜백 함수를 실행합니다.
그리고 setImmediate()는 매 주기마다 연결리스트의 콜백 함수를 실행합니다.
실행 결과를 보면 알 수 있는데, setImmediate()의 첫 번째 콜백 함수가 실행되면 두 번째 콜백 함수가 바로 실행되지 않고 먼저 nextTick()을 다시 setImmediate( )번 누르면 다음 사이클로 들어갑니다. 이렇게 설계한 이유는 각 루프가 빠르게 종료될 수 있도록 하고 CPU가 너무 많이 점유되어 후속 I/O 호출을 차단하는 것을 방지하기 위한 것입니다.
위는 node.js의 타이머 nextTick()과 setImmediate()의 차이점에 대한 정보입니다.