>  기사  >  웹 프론트엔드  >  child_process는 Node.js_node.js에서 다중 프로세스를 구현합니다.

child_process는 Node.js_node.js에서 다중 프로세스를 구현합니다.

WBOY
WBOY원래의
2016-05-16 16:16:051681검색

코드 복사 코드는 다음과 같습니다.

var http = require('http');
함수 fib (n) {
If (n 1을 반환;
} 그 밖의 {
fib(n - 2) fib(n - 1)을 반환합니다.
}
}
var 서버 = http.createServer(function (req, res) {
var num =parseInt(req.url.substring(1), 10);
res.writeHead(200);
res.end(fib(num) "n");
});
server.listen(8000);

위의 예에서는 피보나치 수열 계산 서비스를 제공합니다. 이 계산은 시간이 많이 걸리고 단일 스레드이므로 동시에 여러 요청이 있는 경우 child_process로 이 문제를 해결할 수 있습니다. 포크() 이 질문

다음은 공식 홈페이지의 예입니다. 이를 통해 fork()의 기능을 더 잘 이해할 수 있습니다

코드 복사 코드는 다음과 같습니다.

var cp = require('child_process');
var n = cp.fork(__dirname '/sub.js');
n.on('메시지', function(m) {
console.log('PARENT가 메시지를 받았습니다:', m);
});
n.send({ hello: 'world' });

위 코드 스니펫을 실행한 결과:

코드 복사 코드는 다음과 같습니다.

PARENT님이 메시지를 받았습니다: { foo: 'bar' }
어린이가 메시지를 받았습니다: { hello: 'world' }

sub.js의 내용은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

process.on('메시지', function(m) {
console.log('CHILD가 메시지를 받았습니다:', m);
});
process.send({ foo: 'bar' });

하위 프로세스에서 프로세스 개체에는 send() 메서드가 있으며 메시지를 받을 때마다 메시지 개체를 게시합니다.

조금 혼란스러운 점은 child.send()가 보낸 메시지는 process.on() 메서드가 수신하고, process.send() 메서드가 보낸 메시지는 child.on()이 수신한다는 것입니다. 방법

이 예를 참조하면 각 요청을 처리할 별도의 새로운 프로세스가 있도록 피보나치 데이터를 제공하는 첫 번째 서비스를 개선할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

var http = require('http');
var cp = require('child_process');
var 서버 = http.createServer(function(req, res) {
var child = cp.fork(__dirname '/fibonacci-calc.js');//각 요청은 새로운 하위 프로세스를 생성합니다
child.on('메시지', function(m) {
          res.end(m.result 'n');
});
var 입력 = parsInt(req.url.substring(1));
child.send({입력 : 입력});
});
server.listen(8000);

fibonacci-calc.js

코드 복사 코드는 다음과 같습니다.

함수 fib(n) {
If (n 1을 반환;
} 그 밖의 {
fib(n - 2) fib(n - 1)을 반환합니다.
}
}
process.on('메시지', function(m) {
Process.send({결과: fib(m.input)});
});

서비스 시작 후 http://localhost:8080/9에 접속하여 피보나치 수열 9의 값을 계산해 보세요

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.