우리 모두 알고 있듯이 Node.js는 단일 스레드이며 단일 Node.js 프로세스는 여러 코어를 완전히 활용할 수 없습니다. v0.6.0부터 Node.js에는 클러스터 모듈이 추가되어 Node.js로 웹 서비스를 개발할 때 멀티 코어 시스템을 쉽게 활용할 수 있습니다. 이번 글에서는 Node.js의 다중 프로세스 모듈 클러스터 관련 정보를 주로 소개합니다. 필요한 친구들은
서문
을 참고하세요.우리는 nodejs의 가장 큰 특징이 단일 프로세스, 논블로킹 작업이며 비동기 이벤트 중심이라는 것을 모두 알고 있습니다. Nodejs의 이러한 기능은 몇 가지 문제를 매우 잘 해결할 수 있습니다. 예를 들어 서버 개발에서 동시 요청 처리는 큰 문제이며 차단 기능은 리소스 낭비와 시간 지연을 초래합니다. 이벤트 등록 및 비동기 기능을 통해 개발자는 리소스 활용도를 향상시킬 수 있으며 성능도 향상됩니다. Node.js는 싱글 프로세스, 싱글 스레드 모드를 채택하고 있는데, 멀티 코어 하드웨어가 널리 보급된 오늘날의 환경에서, 싱글 코어 성능이 뛰어난 Nodejs가 어떻게 멀티 코어 CPU의 장점을 활용할 수 있을까요? 설립자 Ryan Dahl은 여러 Nodejs 프로세스를 실행하고 일부 통신 메커니즘을 사용하여 작업을 조정할 것을 권장합니다. 현재 많은 타사 Node.js 다중 프로세스 지원 모듈이 출시되었으며 NodeJS 버전 0.6.x 이상에서는 로드를 공유하기 위해 "동일한 소켓을 공유"하는 프로세스 그룹을 생성할 수 있는 클러스터 모듈을 제공합니다. 압력. .
이 글은 멀티코어 CPU에서의 Node.js 프로그래밍을 설명하기 위해 클러스터 모듈을 기반으로 작성되었습니다.
클러스터 모듈 소개
nodejs에서 제공하는 클러스터 모듈은 현재 실험 단계에 있으며 v0 공식 문서에서 확인할 수 있습니다. .10.7 모듈에 대한 릴리스 정보는 다음과 같습니다.
Stability: 1 - Experimental
이 모듈의 기능과 관련하여 소스 문서에서는 다음과 같이 설명합니다. "Node의 단일 인스턴스는 단일 스레드를 활용하기 위해 사용자는 때때로 로드를 처리하기 위해 노드 프로세스 클러스터를 시작하려고 할 것입니다." 이는 다음을 의미합니다. 노드 예제는 단일 프로세스 모드에서 실행되며 때로는 단일 스레드를 최대한 활용하기 위해 실행됩니다. 멀티 코어 시스템의 리소스를 사용하려면 사용자가 로드를 공유하기 위해 노드 프로세스 그룹을 실행해야 합니다.
클러스터 사용법 소개
먼저 이 모듈의 샘플 애플리케이션 코드를 게시한 후 자세한 분석을 수행합니다. 다음은 다음과 같습니다.
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { require('os').cpus().forEach(function(){ cluster.fork(); }); cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); cluster.on('listening', function(worker, address) { console.log("A worker with #"+worker.id+" is now connected to " + address.address + ":" + address.port); }); } else { http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); console.log('Worker #' + cluster.worker.id + ' make a response'); }).listen(8000); }
이 코드는 매우 간단합니다. 메인 스레드는 현재 실행 중인 js 파일입니다. 메인 스레드는 로컬 시스템의 코어 수를 기반으로 하위 프로세스를 생성합니다. . 모든 프로세스는 수신 대기 포트 8000을 공유합니다. 요청이 시작되면 기본 스레드는 해당 요청을 하위 프로세스에 무작위로 할당합니다. console.log('Worker #' + cluster.worker.id + ' make a response');
이 코드는 어떤 프로세스가 요청을 처리하는지 인쇄할 수 있습니다.
문제 분석
앞서 요청이 시작되면 시스템에서 처리를 위해 요청을 전달할 프로세스를 결정한다고 언급했습니다. 시스템에 전적으로 의존하는 이러한 유형의 로드 밸런싱에는 중요한 결함이 있습니다. Windows, Linux 및 Solaris에서 하위 프로세스의 승인 대기열이 비어 있는 한(일반적으로 생성된 마지막 하위 프로세스) 시스템은 다음에 할당됩니다. 동일한 하위 프로세스를 사용하면 프로세스 간에 로드가 극도로 고르지 않게 됩니다. 특히 긴 연결을 사용하는 경우 단위 시간당 새로 들어오는 연결 수가 높지 않고 하위 프로세스의 승인 대기열이 비어 있는 경우가 많아 연결이 동일한 프로세스에 지속적으로 할당됩니다. 따라서 이러한 종류의 로드 밸런싱은 전적으로 승인 대기열의 유휴 상태에 따라 달라집니다. 로드 밸런싱은 짧은 연결이 사용되고 동시성이 매우 높은 경우에만 달성될 수 있습니다. 시스템이 불안정해집니다.
요약
위 내용은 Node.js의 다중 프로세스 모듈 클러스터에 대한 자세한 소개 및 사용 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!