Nodejs 와 브 라 우 저의 메 인 스 레 드 와 하위 스 레 드

2531 단어 nodejs
내 가 자바 스 크 립 트 (브 라 우 저 든 NodeJS 든) 를 접 하 는 시간 동안 친구 들 이 얼마나 많은 스 레 드 를 필요 로 하 는 지 항상 만 났 다.NodeJS 에 서 는 NodeJS 가 단일 스 레 드 라 다 핵 CPU 를 잘 이용 하지 못 한 다 는 친구 도 있다.
물론 프론트 브 라 우 저 에 서 는 프론트 의 자바 스 크 립 트 와 UI 가 같은 스 레 드 를 차지 하기 때문에 자바 스 크 립 트 를 실행 하 는 것 이 UI 응답 에 어느 정도 번 거 로 움 을 주 었 습 니 다.그러나 아주 큰 순환 문 구 를 사용 하여 자 바스 크 립 트 를 실행 하거나 차단 식 Ajax 를 사용 하거나 너무 잦 은 타이머 로 실행 하지 않 는 한 자 바스 크 립 트 는 전단 응용 에 현저 한 문 제 를 가 져 오지 않 았 기 때문에 자 바스 크 립 트 가 단일 스 레 드 로 다 중 핵 CPU 를 잘 이용 하지 못 한 다 는 불평 도 드 물 었 다. 이 로 인해 성능 병목 이 생기 지 않 았 기 때문이다.그러나 우 리 는 이 오해 에 Ajax 와 Web Worker 로 대답 할 수 있다.Ajax 가 보 내 기 를 요청 하면 동기 화 요청 이 아니면 나머지 자바 스 크 립 트 코드 가 곧 실 행 됩 니 다.Ajax 에서 응답 을 받 을 때 까지 이 네트워크 요청 은 자 바스 크 립 트 의 실행 을 막 지 않 습 니 다. 네트워크 요청 이 발생 한 것 은 필연 적 인 일 입 니 다.그러면 답 은 분명 합 니 다. 자바 스 크 립 트 는 단일 스 레 드 에서 실 행 된 것 이 확실 합 니 다. 그러나 전체 웹 애플 리 케 이 션 에서 실 행 된 숙주 (브 라 우 저) 는 단일 스 레 드 로 실 행 된 것 이 아 닙 니 다.웹 Worker 의 생 성 은 자바 스 크 립 트 와 UI 가 같은 스 레 드 를 차지 하 는 UI 응답 문 제 를 직접 해결 하기 위해 자바 스 크 립 트 를 새로 열 수 있 습 니 다.마찬가지 로 NodeJS 의 JavaScript 도 단일 스 레 드 에서 실 행 됩 니 다. 그러나 숙주 인 NodeJS 는 그 자체 가 단일 스 레 드 가 아 닙 니 다. NodeJS 는 I / O 에 있어 서 일부분 의 추가 스 레 드 를 사용 하여 비동기 화 를 돕 습 니 다.프로그래머 가 직접 스 레 드 를 만 들 기회 가 없 는 것 도 일부 학생 들 이 당연히 NodeJS 의 단일 스 레 드 가 다 핵 CPU 를 잘 이용 하지 못 한다 고 생각 하 는 이유 이다. 그들 은 심지어 여러 사람 이 공동으로 하나의 스 레 드 프로그램 을 개발 하 는 것 을 상상 하기 어렵다 고 말 할 수도 있다.NodeJS 는 내부 의 비동기 가 실 현 된 후에 프로그래머 가 스 레 드 를 직접 조작 할 수 없 게 되 었 고 모든 업무 논리 연산 이 자바 스 크 립 트 의 실행 스 레 드 에 떨 어 질 것 이다. 이것 은 높 은 병행 요청 을 할 때 I / O 문 제 는 잘 해결 되 었 으 나 모든 업무 논리 연산 이 자바 스 크 립 트 스 레 드 에서 적 게 실행 되 었 다 는 것 을 의미한다.붐 비 는 자 바스 크 립 트 연산 라인 이 형성 되 었 다.NodeJS 의 약점 은 이 럴 때 드 러 날 수 있 습 니 다. 단일 스 레 드 가 연산 을 수행 하여 형 성 된 병목 은 I / O 의 효율 을 늦 출 수 있 습 니 다.밀집 연산 상황 에서 다 핵 CPU 를 잘 활용 하지 못 하 는 단점 이 라 고 할 수 있다.이 붐 비 는 자 바스 크 립 트 라인 은 I / O 에 성능 상한 선 을 형성 했다.하지만 절대적 인 것 도 아니다.전단 브 라 우 저 로 돌아 가 스 레 드 가 붐 비 는 상황 을 해결 하기 위해 웹 워 커 가 생 겨 났 다.마찬가지 로 노드 도 child 를 제공 합 니 다.process. fork 에서 Node 의 하위 프로 세 스 를 만 듭 니 다.노드 프로 세 스 가 밀집 I / O 를 잘 해결 할 수 있 는 상황 에서 fork 에서 나 온 나머지 노드 서브 프로 세 스 는 상주 서비스 로 연산 차단 문 제 를 해결 할 수 있 습 니 다.물론 childprocess / Web Worker 의 메커니즘 은 한 대의 기계 문제 만 해결 할 수 있 습 니 다. 큰 웹 애플 리 케 이 션 은 서버 한 대가 모든 요청 서 비 스 를 완성 할 수 없습니다.바 이 노 데 JS 의 I / O 에서 의 장점 은 OS 를 뛰 어 넘 는 다 노드 간 에 통신 하 는 것 은 문제 가 되 지 않 는 다.NodeJS 의 연산 밀집 문 제 를 해결 하 는 답 도 매우 간단 하 다. 바로 여러 CPU 에 연산 을 나 누 어 주 는 것 이다.글 뒤의 multi - node 성능 테스트 를 참고 하 십시오. 다 Node 프로 세 스 의 상황 에서 요청 에 응답 하 는 속도 가 크게 향상 되 었 음 을 볼 수 있 습 니 다.글 쓰기 에서 Node 가 최근 발표 한 0.5.10 버 전 은 cluster 시작 파 라 메 터 를 추가 했다.매개 변수의 사용 방식 은 다음 과 같다.
node cluster server.js

좋은 웹페이지 즐겨찾기