디렉토리
JS 단일 스레드 모델
자바 스크립트는 단일 스레드이며, 언어를 비 차단, 거기에 하나의 메인 스레드이지만, 단 하나 개의 작업을 수행 할 수 있습니다.
JS는 단순화하기 위해 단일 스레드 사용하십시오
스택, 힙 및 메시지 큐를 JS
스택
그것은 호출 함수 레코드에 저장됩니다 - 전화 프레임
더미
그것은 객체에 저장된다
메시지 큐
- 메시지 큐; 상기 보류
- 각 메시지는 메시지를 처리하는 콜백 함수와 연관된다.
이벤트 루프
이벤트 루프 이벤트 루프 무엇입니까
이벤트 루프는 루프 검사 메커니즘입니다
- 메인 스레드가 작업을 실행하는 경우 (비동기 작업이라고 메시지 큐에서 JS 작업) 조건을 충족하기 위해 비동기 메시지 큐 작업이 있는지 확인하는 것입니다.
- 그렇다면, 비동기 태스크는 메인 스레드 동기화 태스크로 전송하고 관련된 콜백 함수를 수행 될
- 작업이 모두를 통해 태스크 큐를 수행하는 경우 연속주기, 프로그램이 종료됩니다.
주요 스레드
동기 및 비동기 작업 작업
동기화 작업
주 스레드의 작업 실행 큐를 중단하지 않습니다
비동기 작업
작업은 매크로 및 마이크로 작업으로 분할된다
매크로 작업
포함 :
전체 코드 포함script、setTimeout、setInterval、setImmediate、I/O、UI rendering
마이크로 작업
포함 :
promise.then, process.nextTick(node中)
마이크로 작업 전에 매크로 작업 실행 순서
프로세스 이벤트 루프
메인 스레드 동기화 태스크 비운 후에 태스크의 실행이 [매크로 작업]에 대한 전체 코드와 첫 번째 구현은 마이크로 작업 목록을 확인할 때, 하나의 실행에 의해 메인 스레드 중 하나에 첨가 비어 있지 않은 경우, 마이크로 태스크리스트 후에 비워 매크로 태스크의 실행, 마이크로 작업 목록의 완료 후에 매크로 태스크 실행이 비어 있지 않으면, 작업이 마이크로 비어까지 마이크로 태스크의 실행 한 후, 다음 매크로 작업을 수행이 끝나는 이벤트 루프 비워 모든 태스크리스트로 순환되었다.
예 :
console.log(1); //1.同步任务#1
setTimeout(function(){ //1.宏任务加入marcotask $1
console.log(2);
new Promise(function(resolve){
console.log(3);
setTimeout(function(){ //$3
console.log(4);
});
resolve();
}).then(function(){ //&2
console.log(5);
});
});
new Promise(function(resolve){ //1.promise 是同步任务!!!#2
console.log(6);
setTimeout(function(){ //1.加入宏任务队列 $2
console.log(7);
});
resolve();
}).then(function(){ //1.微任务加入microtask &1
console.log(8);
});
console.log(9); //1.同步任务#3
169,823,574의 결과
- 첫째 # 1 동기화 작업이 발생 수행
setTimeout
받는 추가 매크로 작업 $ 1macrotask
을 충족 큐,promise
동기화 작업 # 2, 직접 실행을,promise
실행은 실행setTimeout
매크로 작업 $ 2, 가입macrotask
만난 큐,then()
마이크로 태스크 큐, 다음 동기화 작업 # 3 가입을 이벤트 루프의 일단,
케이스 : 출력 결과 [169]
. macrotask : $ 2 $ 1
Microtask 1 :. - 1 마이크로 태스크, 태스크 동기화 출력 [8], 마이크로 비어있는 큐 수행 macrotask 수행
- 매크로 작업 $ 1의 실행을 충족 동기화 작업 출력 [2], 수행
promise
의 동기화 작업을 수행하기 위해, 출력 [3], 발생setTimeout
매크로 작업 $ 3, 참여macrotask
, 대회then()
& 2, 추가microtask
, $ 1 매크로 작업이 완료되어microtask
있으므로, 비어 있지 다음으로 마이크로 작업을 수행한다. - 마이크로 태스크 실행 태스크리스트 & 2, 출력은 [5], 큐의 종료 후에 마이크로 비어 매크로 작업 실행
- $ 2 매크로 작업 실행, 출력 [7], 실행 종료
- $ 3 매크로 작업 실행, 출력 [4], 실행 종료
- 이 때, 모든 큐는 이벤트 루프의 끝을 비 웁니다.
요약 : 제 매크로 작업, 실행중인 모든 마이크로 작업 등을 수행하는 단계;