JavaScript의 비동기 실행 메커니즘 소개

高洛峰
풀어 주다: 2017-03-19 16:19:05
원래의
1214명이 탐색했습니다.

----비동기 실행 메커니즘은 다음과 같습니다.

1. 왼쪽 및 오른쪽 동기화 작업이 메인 스레드에서 실행되어 실행 스택을 형성합니다

2. 메인 스레드 값에는 작업 큐도 있습니다. 비동기 작업에 실행 결과가 있으면 이벤트가 작업 큐에 배치됩니다.

3. 실행 스택의 모든 동기 작업이 실행되면 , 시스템은 작업 큐와 실행될 작업에 해당하는 작업을 읽습니다. 작업은 메인 스레드에 배치되고 메인 스레드는 상태 를 기다리다가 끝나고 실행 스택에 들어가서 실행을 시작합니다. 🎜>

(메인 스레드가 비어 있는 한 작업 대기열을 읽습니다. 이는

JavaScript실행 메커니즘이므로 이 프로세스가 반복됩니다.)

4 위를 반복합니다. 메인 스레드의 단계

----JavaScript가 단일 스레드인 이유:

1.JavaScript 브라우저 스크립트 언어로서 한 번에 한 가지 작업만 수행할 수 있습니다. 다중 스레드는 충돌을 일으킬 수 있으므로 JavaScript는 단일 스레드만 가능합니다

----

HTML5 표준에서는 setTimeout()의 두 번째 매개변수의 최소값(최단 간격)을 규정하고 있습니다. 이 값보다 작으면 자동으로 증가합니다. 이전에는 이전 브라우저에서 최소 간격을 10밀리초로 설정했습니다. 또한 이러한 DOM 변경(특히 페이지 재렌더링과 관련된 변경)은 일반적으로 즉시 실행되지 않고 16밀리초마다 실행됩니다. 이때 setTimeout()보다 requestAnimationFrame()을 사용하는 것이 효과가 더 좋습니다.

setTimeout()은 이벤트를 "작업 대기열"에만 삽입한다는 점에 유의해야 합니다. 메인 스레드는 지정된 콜백 함수

. 현재 코드가 오래 걸리면 시간이 오래 걸릴 수 있으므로 setTimeout()에서 지정한 시간에 콜백 함수가 실행된다는 보장은 없습니다. ---

"태스크 큐"는 이벤트 큐입니다(메시지 큐로도 이해될 수 있음). IO 장치가 작업을 완료하면 "태스크에 추가됩니다. queue" 관련 비동기 작업이 "실행 스택"에 들어갈 수 있음을 나타내는 이벤트입니다. 메인 스레드는 "작업 대기열"을 읽습니다. 이는 그 안의 이벤트를 읽는다는 의미입니다.

IO 장치 이벤트 외에도 "작업 대기열"의 이벤트에는 일부 사용자 생성 이벤트(예: 마우스 클릭, 페이지 스크롤 등)도 포함됩니다. 콜백 함수가 지정되어 있는 한 이러한 이벤트는 발생 시 "작업 대기열"에 들어가고 주 ​​스레드가 읽을 때까지 기다립니다.

소위 "콜백 함수"(콜백)는 메인 스레드에 의해 중단되는 코드입니다. 비동기 작업은 콜백 함수를 지정해야 합니다. 메인 스레드가 비동기 작업 실행을 시작하면 해당 콜백 함수가 실행됩니다.

"태스크 큐"는 선입선출(FIFO) 데이터 구조입니다. 첫 번째 순위의 이벤트는 메인 스레드에서 먼저 읽혀집니다. 기본 스레드의 읽기 프로세스는 기본적으로 자동으로 실행 스택이 지워지자마자 "작업 대기열"의 첫 번째 이벤트가 자동으로 기본 스레드에 들어갑니다. 하지만 나중에 언급되는 "

Timer

" 기능으로 인해 메인 스레드는 먼저 실행 시간을 확인해야 하며, 특정 이벤트는 지정된 시간 이후에만 메인 스레드로 반환될 수 있습니다. ----자바스크립트에 코드가 없을 때 즉시 실행됩니다. 프로세스가 유휴 상태일 때 최대한 빨리 실행됩니다.

위 내용은 JavaScript의 비동기 실행 메커니즘 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!