node 이벤트 순환 과 메시지 대기 열 분석

비동기 가 무엇 입 니까?
비동기 와 동기 화 는 자주 이야기 하 는 화제 일 것 이다.동기 화 개념 은 간단 하 다.위 에서 아래로 순서대로 집행 하고 위 에서 아래로 집행 해 야 한다.이 보 는 명령 을 먼저 제출 할 수 있 고 중간 에 다른 일 을 수행 할 수 있 으 며 실행 이 끝 난 후에 고 개 를 돌려 이전 작업 으로 돌아 갈 수 있 습 니 다.
예 를 들 어:
당신 은 운 이 좋게 도 예 쁜 여자 친 구 를 찾 았 습 니 다.어느 날 당신 의 여자 친구 가 당신 에 게 저녁 에 무슨 영 화 를 보 느 냐 고 문 자 를 보 냈 습 니 다.그러나 당신 은 무엇 을 보 는 지 모 르 고 바로 컴퓨터 를 켜 서 최근 에 인기 있 는 영 화 를 찾 아 보 았 습 니 다.그 중에서 여자 친구 가 당신 을 기다 리 고 있 습 니 다.이것 이 바로 동기 화 입 니 다.
이 보 는?아니면 네 여자 친구 가 문 자 를 보 내 서 너 에 게 무슨 영 화 를 보 느 냐 고 물 었 다.너 는 그녀 에 게 먼저 기 다 려 라.내 가 알 아 보고 알 아 본 후에 네가 나중에 전화 해서 그녀 에 게 알려 주 었 다.이것 이 바로 비동기 다.
따라서 우 리 는 동기 화 와 비동기 화의 일부 특징 을 볼 수 있다.
1.반드시 두 대상 에 게 발생 해 야 한다.(니 여자친 구 랑)
2.뭔 가 있어 야 한다.(영 화 를 보다
다른 것 은 동기 화 는 순서대로 실행 하 는 것 이다.하 나 를 실행 한 후에 다른 하 나 를 실행 하 는 것 이다.이 보 는 하 나 를 먼저 실행 하 는 것 이다.실행 이 끝나 지 않 은 후에 다른 하 나 를 실행 하고 첫 번 째 실행 이 끝 난 후에 결 과 를 되 돌려 주 는 것 이다.
왜 비동기 가 필요 합 니까?
답 은 분명 하 다.일의 효율 을 높이 기 위해 CPU 의 계산 속도 와 디스크 의 읽 기와 쓰기 속도 가 너무 멀 고 디스크 의 공급 이 수 요 를 따 르 지 못 하기 때문에 컴퓨터 의 저장 시스템 의 레이 어 링 디자인 이 있어 효율 과 원 가 를 균형 시 켰 다.게 으 름 이 인간 의 진 보 를 추진 하고 시간 을 줄 여 똑 같은 효 과 를 거 둘 수 있 는 모든 방법 이 우선 시 될 것 이 라 고 할 수 있다.
문자 메 시 지 를 보 낼 때 상대방 의 답장 을 기다 리 는 시간 은 순 전 히 낭비 되 었 고 CPU 가 디스크 에 기록 되 어 돌아 오 기 를 기다 리 는 결과 의 대기 시간 도 무자비 하 게 소모 되 었 다.효율 성 을 중시 하 는 시 대 는 전혀 참 을 수 없 는 것 이기 때문에 직원 들 을 바 쁜 상태 에 처 하 게 하고 직원 의 가 치 를 최대한 착취 하 는 것 은 사장 이 추구 하 는 것 이다.CPU 와 디스크 를 끊임없이 만부 하 처리 하 는 것 도 효율 적 이다.그래서 비동기 처리 가 나 타 났 다.
비동기 IO 란 무엇 입 니까?
비동기 IO 는 운영 체제 가 제공 하 는 IO(데이터 출입)능력 을 말한다.예 를 들 어 키보드 입력 은 모니터 에 대응 하면 전문 적 인 데이터 출력 인터페이스 가 있 는데 이것 이 바로 우리 생활 에서 볼 수 있 는 IO 능력 이다.이 인 터 페 이 스 는 아래 에서 운영 체제 라 는 차원 으로 들 어 갈 것 이다.운영 체제 에서 많은 능력 을 제공 할 것 이다.예 를 들 어 디스크 의 읽 기와 쓰기,DNS 의 조회,데이터 뱅 크 의 연결,네트워크 요청 의 처리 등 이다.
서로 다른 운영 체제 차원 에서 표현 이 일치 하지 않 는 다.어떤 것 은 비동기 적 이 고 막 히 지 않 는 다.어떤 것 은 동기 화 된 차단 이다.어쨌든 우 리 는 상층 부 에서 하층부 시스템 간 에 응용 되 는 데이터 상호작용 이 라 고 볼 수 있다.상층 부 는 하층부 에 의존 하지만 반대로 상층 부 는 하층부 가 제공 하 는 이런 능력 을 개조 할 수 있다.만약 에 이런 조작 이 비동기 적 이 고 막 히 지 않 는 다 면 이것 은 비동기 적 이 고 막 히 지 않 는 비동기 IO 모델 이다.동기 화 차단 이 라면 동기 화 IO 모델 입 니 다.
koa 는 상부 의 웹 서비스 구조 로 모두 js 에 의 해 이 루어 집 니 다.그 는 운영 체제 간 의 상호작용 이 있 고 모두 nodejs 를 통 해 이 루어 집 니 다.예 를 들 어 nodejs 의 readFile 은 비동기 비 차단 인터페이스 이 고 readFileSync 는 동기 화 차단 인터페이스 입 니 다.
이벤트 순환 이란 무엇 입 니까?
이벤트 순환 이란 Node.js 가 비 차단 I/O 작업 을 수행 하 는 것 을 말 합 니 다.자바 스 크 립 트 는 단일 스 레 드 임 에 도 불구 하고 대부분의 커 널 이 다 중 스 레 드 이기 때문에 node.js 는 가능 한 한 시스템 커 널 에 작업 을 불 러 옵 니 다.따라서 백 스테이지 에서 실행 되 는 여러 작업 을 처리 할 수 있다.그 중 하나 가 완 료 될 때 커 널 은 node.js 에 게 node.js 가 해당 하 는 리 셋 을 폴 링 대기 열 에 추가 하여 최종 적 으로 실행 할 수 있 도록 알려 줍 니 다.즉,js 는 단일 스 레 드 이지 만 node 가 실 행 될 때 는 다 중 스 레 드 입 니 다.개인 적 인 이해)메시지 대기 열 은 먼저 나 온 대기 열 로 각종 메 시 지 를 저장 하고 있다.
V8 엔진
우리 가 흔히 말 하 는 크롬 엔진 과 nodejs 엔진 은 V8 엔진 이다.그 는 대체적으로 다음 과 같이 구성 된다.

이 엔진 은 메모리 더미 와 호출 스 택 으로 구성 되 어 있 으 며,메모리 더 미 는 메모리 분 배 를 책임 집 니 다.예 를 들 어 변수 할당,호출 스 택 은 코드 가 실행 되 는 곳 입 니 다.
스 택 에서 주 스 레 드 코드 를 순서대로 실행 합 니 다.스 택 이 비어 있 을 때 js 엔진 은 메시지 큐 에 가서 메 시 지 를 가 져 옵 니 다.가 져 오 면 실행 합 니 다.JavaScript 는 단일 스 레 드 의 프로 그래 밍 언어 로 단일 호출 스 택 이 있 음 을 의미 합 니 다.그래서 같은 시간 에 한 가지 일 을 할 수 밖 에 없다.호출 스 택 은 데이터 구조 로 기본적으로 우리 가 프로그램 에서 어떤 위 치 를 기록 하고 있 는 지 기록 합 니 다.만약 우리 가 함수 에 들어간다 면,우 리 는 이 데 이 터 를 창고 의 맨 위 에 놓 을 것 이다.만약 우리 가 한 함수 에서 돌아온다 면,이 데이터 들 은 창고 꼭대기 에서 팝 업 될 것 이다.이것 이 바로 창고 의 용도 다.스 택 의 모든 항목 을 스 택 프레임 이 라 고 합 니 다.쌓 기와 창고 의 차 이 는 먼저 나 가 고,하 나 는 먼저 나 가 고,하 나 는 먼저 나 가 고,하 나 는 나중에 나 가 는 것 이다.
js 가 실 행 될 때

우리 가 자주 사용 하 는 일부 API 는 js 엔진 에서 제공 하 는 것 이 아니다.예 를 들 어 타이머 setTimeout 이다.
이 는 브 라 우 저 에서 제공 되 는 것,즉 실행 할 때 제공 되 는 것 이기 때문에 실제로 자바 스 크 립 트 엔진 외 에 도 다른 구성 요소 가 있 습 니 다.
그 중 하 나 는 브 라 우 저 에서 제공 하 는 웹 API,예 를 들 어 DOM,AJAX,setTimeout 등 이다.
그리고 인기 있 는 이벤트 순환 과 리 셋 대기 열 도 있다.
운행 시 엔진 스 레 드 에 메 시 지 를 보 내 는 것 을 책임 지고 생산 메시지 만 책임 지 며 메 시 지 를 받 는 것 은 책임 지지 않 습 니 다.
메시지 큐
주 스 레 드 는 실행 과정 에서 비동기 작업 을 만 났 을 때 함 수 를 시작 하거나 등록 함수 라 고 부 릅 니 다.이벤트 loop 스 레 드 를 통 해 해당 하 는 작업 스 레 드(예 를 들 어 ajax,dom,setTimout 등)를 알 리 는 동시에 주 스 레 드 는 계속 뒤로 실행 되 며 기다 리 지 않 습 니 다.작업 스 레 드 가 완료 되면 이벤트 loop 스 레 드 는 메 시 지 를 메시지 큐 에 추가 합 니 다.이 때 메 인 스 레 드 에서 스 택 이 비어 있 으 면 메시지 큐 에서 맨 앞 에 있 는 메 시 지 를 순서대로 실행 합 니 다.
새로운 메시지 가 대기 열 에 들 어 갈 때 자동 으로 대기 열의 끝 에 배 열 됩 니 다.
단일 스 레 드 는 js 작업 이 줄 을 서 야 한 다 는 것 을 의미 합 니 다.만약 에 앞의 작업 이 대량의 시간 소모 작업 이 발생 하면 뒤의 작업 이 실행 되 지 못 하고 작업 의 축적 은 페이지 의'가사'를 초래 할 수 있 습 니 다.이것 도 js 프로 그래 밍 이 회피 해 야 할'구덩이'를 강조 해 왔 다.
메 인 라인 은 상기 절 차 를 순환 합 니 다.이벤트 순환 은 메 인 라인 이 메시지 대기 열 에서 메 시 지 를 가 져 오고 실행 하 는 과정 을 반복 하 는 것 입 니 다.
주의해 야 할 것 은 GUI 렌 더 링 스 레 드 와 JS 엔진 이 서로 배척 하 는 것 입 니 다.JS 엔진 이 실 행 될 때 GUI 스 레 드 가 걸 리 고 GUI 업 데 이 트 는 한 대기 열 에 저 장 됩 니 다.JS 엔진 이 비어 있 을 때 바로 실 행 됩 니 다.따라서 페이지 렌 더 링 은 js 엔진 의 메 인 스 레 드 호출 스 택 이 비어 있 을 때 이 루어 집 니 다.
사실 이벤트 순환 메커니즘 과 메시지 큐 의 유 지 는 이벤트 트리거 스 레 드 에 의 해 제 어 됩 니 다.
이벤트 트리거 스 레 드 역시 브 라 우 저 렌 더 링 엔진 이 제공 합 니 다.메시지 큐 를 유지 합 니 다.
JS 엔진 스 레 드 가 비동기(DOM 이벤트 감청,네트워크 요청,setTimeout 타이머 등...)를 만나면 해당 스 레 드 에 비동기 작업 을 단독으로 유지 하고 특정한 시 기 를 기다 리 며(타이머 종료,네트워크 요청 성공,사용자 가 DOM 을 클릭)이벤트 트리거 스 레 드 에서 비동기 대응 하 는 리 셋 함 수 를 메시지 대기 열 에 추가 합 니 다.메시지 큐 의 리 셋 함수 가 실 행 될 때 까지 기 다 립 니 다.
이 동시에 JS 엔진 스 레 드 는 실행 스 택 을 유지 하고 동기 코드 는 순서대로 실행 스 택 에 가입 한 다음 에 실행 되 며 종료 되면 실행 스 택 을 종료 합 니 다.
스 택 에 있 는 작업 이 완료 되면 스 택 이 비어 있 을 때(즉 JS 엔진 스 레 드 가 비어 있 을 때)이벤트 트리거 스 레 드 가 메시지 대기 열 에서 작업(즉 비동기 리 셋 함수)을 꺼 내 실행 스 택 에 넣 을 수 있 습 니 다.
이상 은 node 이벤트 순환 과 메시지 큐 의 상세 한 내용 을 분석 하 는 것 입 니 다.node 이벤트 순환 과 메시지 큐 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기