ホームページ >ウェブフロントエンド >jsチュートリアル >child_process は Node.js_node.js でマルチプロセスを実装します

child_process は Node.js_node.js でマルチプロセスを実装します

WBOY
WBOYオリジナル
2016-05-16 16:16:051712ブラウズ

コードをコピーします コードは次のとおりです:

var http = require('http');
関数 fib (n) {
If (n 1 を返します;
} else {
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");
});
サーバー.listen(8000);

上記の例は、フィボナッチ数列計算サービスを提供します。この計算は非常に時間がかかり、シングルスレッドであるため、同時に複数のリクエストがある場合、これは child_process によって解決できます。 fork() この質問

これは公式 Web サイトからの例です。これにより、fork() の機能をよりよく理解できます

コードをコピーします コードは次のとおりです:

var cp = require('child_process');
var n = cp.fork(__dirname '/sub.js');
n.on('メッセージ', function(m) {
console.log('親がメッセージを受け取りました:', m);
});
n.send({ hello: 'world' });

上記のコード スニペットを実行した結果:

コードをコピーします コードは次のとおりです:

親がメッセージを受け取りました: { foo: 'bar' }
CHILD がメッセージを受け取りました: { hello: 'world' }

sub.jsの内容は以下のとおりです。

コードをコピーします コードは次のとおりです:

process.on('メッセージ', function(m) {
console.log('子供がメッセージを受け取りました:', m);
});
process.send({ foo: 'bar' });

子プロセスでは、プロセス オブジェクトに send() メソッドがあり、メッセージを受信するたびにメッセージ オブジェクトをパブリッシュします

少し混乱するのは、child.send() によって送信されたメッセージは process.on() メソッドによって受信され、process.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('メッセージ', function(m) {
res.end(m.result 'n');
});
var input = parseInt(req.url.substring(1));
child.send({input : input});
});
サーバー.listen(8000);

フィボナッチ計算.js

コードをコピーします コードは次のとおりです:

関数 fib(n) {
If (n 1 を返します;
} else {
fib(n - 2) fib(n - 1);
を返します。 }
}
process.on('メッセージ', function(m) {
Process.send({result: fib(m.input)});
});

サービスを開始した後、http://localhost:8080/9 にアクセスして、9 のフィボナッチ数列の値を計算します

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。