이 기사에서는 Nodejs의 이벤트 루프에 대해 설명합니다. 이제부터 Nodejs의 이벤트 루프에 대해 이야기하는 면접관의 영혼을 두려워하지 않을 것입니다.
면접하는 동안 면접관이 다들 "Nodejs의 이벤트 루프에 대해 알려주세요."라는 질문을 받을 것이라고 생각합니다.
저도 이런 질문을 받았는데, 그럴 때마다 쑥스럽거든요.
이 문제에 대해 여러 기술 블로그에 많은 소개가 있지만 이해한 적이 없습니다. 이러한 기사는 종종 많은 다이어그램과 용어로 시작하여 이해하려는 용기를 즉시 소멸시키기 때문입니다. [추천 관련 튜토리얼: nodejs 동영상 튜토리얼, Programming Teaching]
이해가 안 되서 면접관이 계속 물어봐서 눈물을 흘리며 이를 악물고 튜토리얼을 참고해서 스스로 이해했습니다. 즉시 모든 사람과 공유됩니다.
한마디로: 이벤트 루프는 Nodejs가 비동기 작업을 처리하는 메커니즘입니다.
Js는 단일 스레드인데 왜 Nodejs가 비동기 작업을 처리할 수 있나요?
Nodejs는 다중 스레드 작업을 시스템 커널에 넘겨주기 때문입니다.
위 그림:
Nodejs는 Js를 기반으로 자체적으로 멀티 스레드 작업을 구현할 수 없지만 시스템 커널에 멀티 스레드 작업을 던집니다.
대부분의 시스템 커널이 멀티스레드이고 커널 실행이 그리 쉽지 않기 때문에 Nodejs가 편안하게 쉴 수 있을까요?
(먼저 이벤트 루프의 이름을 설명합니다. Nodejs는 이벤트 중심입니다. 언제, 언제 무엇을 해야 하는지는 콜백 함수에 정의되어 있습니다.
따라서 콜백 함수는 이벤트 처리 함수로 정의할 수 있습니다. 그래서 콜백을 관리하세요. 함수의 메커니즘을 이벤트 루프라고 합니다.)
커널이 너무 강력해서 Nodejs가 아무것도 할 수 없나요?
아니요, 커널 실행이 완료된 후 Nodejs는 해당 콜백 함수를 실행해야 합니다.
따라서 비동기 작업 콜백 함수가 싸우고 엉망이 되는 것을 방지하기 위해 관리하고 유지하는 데 도움이 되는 메커니즘이 필요합니다.
따라서 효율적인 방식으로 실행되었습니다. 그래서 ---event loop---가 필요한 것입니다.
요약: 이벤트 루프는 Nodejs에서 비동기 코드 콜백의 실행 순서를 제어하는 데 사용됩니다!
여기서는 먼저 Nodejs의 비동기 API를 분류합니다. 위의 세 가지 비동기 API는 이벤트 루프 내에 세 가지 유형의 대기열을 제공합니다.
이상합니까? 왜 process.nectTick이 없나요?
하하, process.nectTick 자체가 이상하기 때문이죠!
process.nectTickprocess.nectTick은 비동기 API이지만 이벤트 루프의 일부는 아닙니다.위 그림:
여기에는 또 다른 개념이 포함됩니다:
비동기 모듈! 비동기 모듈
라이브러리를 사용하여 커널을 호출하여 멀티 스레드 작업을 수행합니다!
이것이 process.nectTick과 얼마나 관련이 있나요?예, process.nectTick은 비동기 모듈의 일부로 이해될 수 있기 때문입니다.
따라서 process.nectTick은 항상 이벤트 루프 전에 호출됩니다!
(참고: Tick을 이해하세요
이벤트 루프의 3개 대기열이 일주일 동안 실행되고 Tick이 됩니다!) 알았어, 이해했어!
잠깐...뭔가 빠진 것 같나요? Promise는 어떻게 실행되나요?
Promise
그렇다면 마이크로태스크 큐의 실행 순서는 무엇일까요?
위 그림:
? 팁 3: 마이크로태스크 대기열은 process.nectTick 대기열 뒤와 이벤트 루프 앞에 추가됩니다.
? 팁 4: 연습은 진정한 지식을 가져옵니다.
당신이 똑똑하다면 위의 이론을 사용하여 최종 인쇄 순서를 분석할 수 있습니까?console.log('同步代码')setImmediate(() => { console.log('setImmediate');})setTimeout(() => { console.log('setTimeout');}, 100)Promise.resolve().then(() => { console.log('promise');})process.nextTick(() => { console.log('Tick');})复制代码
nodejs 튜토리얼
을 방문하세요!위 내용은 하나의 기사로 Node의 이벤트 루프 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!