JavaScript 이벤트 루프 관련 원리 분석
2295 단어 JavaScriptEventLoop
단일 스 레 드 모델 은 자바 스 크 립 트 가 한 스 레 드 에서 만 실 행 될 수 있다 는 것 을 말 합 니 다.즉,하나의 작업 만 동시에 가리 킬 수 있 고 다른 작업 은 모두 뒤에서 줄 을 서서 기 다 려 야 합 니 다.메모:자 바스 크 립 트 는 한 라인 에서 만 실행 되 지만 코드 자 바스 크 립 트 엔진 은 한 라인 만 실행 되 지 않 습 니 다.사실 자바 스 크 립 트 엔진 은 여러 개의 스 레 드 가 있 습 니 다.하나의 스 크 립 트 는 한 스 레 드 에서 만 실 행 될 수 있 습 니 다(메 인 스 레 드).다른 스 레 드 는 모두 배경 에서 합 쳐 집 니 다.
JavaScript 는 왜 다 중 스 레 드 가 아 닌 단일 스 레 드 를 사용 합 니까?
브 라 우 저 를 복잡 하 게 만 들 고 싶 지 않 습 니 다.다 중 스 레 드 는 자원 을 공유 하고 서로 실행 하 는 결 과 를 수정 할 수 있 기 때 문 입 니 다.
이 모드 가 초래 할 문제?
단일 작업 이 오래 걸 리 면 전체 프로그램의 실행 을 지연 시 켜 브 라 우 저 에 응답 하지 않 을 수 있 습 니 다(가사)
자 바스 크 립 트 는 어떻게 이 문 제 를 해결 합 니까?
단일 스 레 드 로 인해 CPU 는 한가 할 때 가 많 고 IO 작업(입 출력)이 느 리 기 때문에(예 를 들 어 Ajax 작업 이 네트워크 에서 데 이 터 를 읽 기)CPU 는 IO 작업 을 전혀 상관 하지 않 고 대기 중인 작업 을 걸 고 뒤에 있 는 작업 을 먼저 실행 할 수 있 습 니 다.IO 작업 이 결 과 를 되 돌 릴 때 까지 기 다 렸 다가 다시 고 개 를 돌려 걸 린 임 무 를 계속 수행 합 니 다.이런 메커니즘 은 바로 JavaScript 내부 에서 사용 하 는'이벤트 순환'메커니즘(Event Loop)이다.
2.동기 화 작업 과 비동기 작업
프로그램 에 있 는 모든 작업 은 동기 화 작업(synchronous)과 비동기 작업(asynchronous)으로 나 눌 수 있 습 니 다.
동기 화 작업:엔진 에 걸 리 지 않 고 메 인 스 레 드 에서 줄 을 서서 수행 하 는 작업 입 니 다.앞의 임 무 를 다 수행 해야만 뒤의 임 무 를 수행 할 수 있다.
비동기 작업:엔진 에 의 해 한쪽 으로 놓 여 있 고 메 인 스 레 드 를 하지 않 고 작업 대기 열 에 들 어 가 는 작업 입 니 다.엔진 이 특정한 비동기 작업 을 수행 할 수 있다 고 생각 할 때(예 를 들 어 Ajax 작업 이 서버 에서 결 과 를 얻 었 다)이 작업 은(리 셋 함수 형식 을 통 해)메 인 스 레 드 에 들 어가 서 실 행 될 수 있 습 니 다.비동기 작업 뒤에 있 는 코드 는 비동기 작업 이 끝 날 때 까지 기다 리 지 않 아 도 바로 실 행 됩 니 다.즉,비동기 작업 은'막힘'효 과 를 가지 지 않 습 니 다.
3.작업 대기 열과 이벤트 순환
JavaScript 가 실 행 될 때 실행 중인 메 인 스 레 드(호출 스 택(call stack)라 고도 함)를 제외 하고 엔진 은 작업 대기 열(task quue)을 제공 합 니 다.그 안 에는 현재 프로그램 이 처리 해 야 할 여러 가지 비동기 작업 이 있 습 니 다.(실제로 비동기 작업 의 유형 에 따라 여러 작업 대기 열 이 존재 합 니 다.나중에 자세히 설명 하 겠 습 니 다)
1.메 인 스 레 드 는 모든 동기 화 작업 을 수행 합 니 다.
2.동기 화 작업 이 모두 실 행 될 때 까지 작업 대기 열 에 있 는 비동기 작업 을 보고 조건 을 만족 시 키 는 메 인 스 레 드 에 다시 들 어가 서 실행 을 시작 합 니 다.이때 동기 화 작업 이 됩 니 다.
3.작업 이 끝나 면 다음 비동기 작업 은 메 인 스 레 드 에 들 어가 서 실 행 됩 니 다.
4.엔진 이 계속 검사("이벤트 순환")하고 작업 대기 열 이 비 워 지면 프로그램 이 실 행 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.