>웹 프론트엔드 >JS 튜토리얼 >Child_process는 Node.js에서 여러 프로세스를 구현합니다.

Child_process는 Node.js에서 여러 프로세스를 구현합니다.

高洛峰
高洛峰원래의
2016-12-26 09:14:541367검색

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(&#39;child_process&#39;);
var n = cp.fork(__dirname + &#39;/sub.js&#39;);
n.on(&#39;message&#39;, function(m) {
  console.log(&#39;PARENT got message:&#39;, m);
});
n.send({ hello: &#39;world&#39; });

위의 실행 결과. 코드 조각:

PARENT got message: { foo: &#39;bar&#39; }
CHILD got message: { hello: &#39;world&#39; }

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

process.on(&#39;message&#39;, function(m) {
  console.log(&#39;CHILD got message:&#39;, m);
});
process.send({ foo: &#39;bar&#39; });

하위 프로세스에서 프로세스 개체에는 send() 메서드가 있으며 이는

조금 혼란스러운 점은 child.send()가 보낸 메시지가 process.on() 메서드에 의해 수신되고 메시지가 프로세스에 의해 전송된다는 것입니다. .send() 메소드는 child.on() 메소드에 의해 수신됩니다

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

var http = require(&#39;http&#39;);
var cp = require(&#39;child_process&#39;);
var server = http.createServer(function(req, res) {
    var child = cp.fork(__dirname + &#39;/fibonacci-calc.js&#39;);//每个请求都单独生成一个新的子进程
    child.on(&#39;message&#39;, function(m) {
        res.end(m.result + &#39;\n&#39;);
    });
    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(&#39;message&#39;, function(m) {
    process.send({result: fib(m.input)});
});

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

이상이 이 글입니다. 모두 마음에 드셨으면 좋겠습니다.

Node.js에서 child_process의 다중 프로세스 구현과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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