var http = require('http'); function fib (n) { if (n < 2) { return 1; } else { return fib(n - 2) + fib(n - 1); } } var server = 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를 통해 하나만 처리할 수 있습니다. ) 이 문제는 해결될 수 있습니다
다음은 공식 홈페이지의 예입니다. 이 예를 통해, fork()의 기능을 더 잘 이해할 수 있습니다
var cp = require('child_process'); var n = cp.fork(__dirname + '/sub.js'); n.on('message', function(m) { console.log('PARENT got message:', m); }); n.send({ hello: 'world' });
위의 실행 결과. 코드 조각:
PARENT got message: { foo: 'bar' } CHILD got message: { hello: 'world' }
sub.js의 내용은 다음과 같습니다.
process.on('message', function(m) { console.log('CHILD got message:', m); }); process.send({ foo: 'bar' });
하위 프로세스에서 프로세스 개체에는 send() 메서드가 있으며 이는
조금 혼란스러운 점은 child.send()가 보낸 메시지가 process.on() 메서드에 의해 수신되고 메시지가 프로세스에 의해 전송된다는 것입니다. .send() 메소드는 child.on() 메소드에 의해 수신됩니다
이 예를 참조하면 피보나치 데이터를 제공하는 첫 번째 서비스를 개선하여 각 요청을 처리할 별도의 새로운 프로세스가 있도록 할 수 있습니다
var http = require('http'); var cp = require('child_process'); var server = http.createServer(function(req, res) { var child = cp.fork(__dirname + '/fibonacci-calc.js');//每个请求都单独生成一个新的子进程 child.on('message', function(m) { res.end(m.result + '\n'); }); var input = parseInt(req.url.substring(1)); child.send({input : input}); }); server.listen(8000);
fibonacci-calc.js
function fib(n) { if (n < 2) { return 1; } else { return fib(n - 2) + fib(n - 1); } } process.on('message', function(m) { process.send({result: fib(m.input)}); });
서비스 시작 후 http://localhost:8080/9에 접속하여 피보나치 수열 9의 값을 계산해 보세요
이상이 이 글입니다. 모두 마음에 드셨으면 좋겠습니다.
Node.js에서 child_process의 다중 프로세스 구현과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!