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);
上記の例は、フィボナッチ数列計算サービスを提供します。この計算は非常に時間がかかり、シングルスレッドであるため、同時に複数のリクエストがある場合は 1 つしか処理できません。これは child_process.fork( ) 質問
これは公式Webサイトから引用した例です。この例を通して、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' });
In 子プロセスのプロセス オブジェクトには 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('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 中国語 Web サイトに注目してください。