노드의 메인 스레드는 js 코드를 실행합니다. 비동기 작업인 경우 노드는 실행을 위해 이를 libuv에 넘겨준 다음 비동기 작업 뒤에 있는 코드를 실행합니다. libuv가 실행되면 순환 대기열에 배치됩니다. libuv는 while(true)와 유사한 이벤트 루프(이벤트 루프)를 갖게 됩니다. 이 이벤트 루프는 노드의 단일 스레드(즉, 메인 스레드)에 존재합니다. . 메인 스레드 루프 이벤트 실행 콜백 함수를 가져옵니다.
그렇다면 이벤트를 가져오기 위해 메인 스레드를 반복하고 그 뒤에 있는 비동기 코드를 실행하는 프로세스는 무엇입니까? 스레드가 동시에 두 가지 작업을 수행하는 것은 불가능합니다. 비동기 코드를 실행한 후 CPU 루프가 유휴 상태일 때 이벤트를 가져오나요?
우선, 코드 실행이 있을 때 메인 스레드가 폴링하지 않는다는 점을 분명히 하세요.
그래서 메인 스레드는 이벤트 큐를 폴링하기 전에 모든 초기 코드(비콜백 코드)를 실행합니다(이벤트 큐는 폴링될 때 js 객체로 간주될 수 있음). 이론적으로 js 엔진의 메인 스레드는 이벤트 큐만 인식할 수 있기 때문입니다. js 코드.
그러나 초기 코드가 실행된 후 js 메인 스레드는 이벤트를 폴링합니다. 콜백 함수가 획득되면 js 엔진은 현재 콜백 코드가 실행될 때까지 다시 폴링하지 않습니다.
요약하자면, 실행할 코드가 없을 때는 js 엔진만 폴링합니다. 즉, js 메인 스레드에는 항상 하나의 콜백 함수만 있습니다
이 글이 여러분의 궁금증을 풀어줄 수 있을 것 같아요