そのため、setTimeout のようなもので可能な限り最高のタイム レートを達成するために、特定のモジュールのイベント ループをできるだけ小さく保ちたいと考えています。これにより、V8 エンジンがループの処理に費やす時間が最小限に抑えられます。最良のシナリオ:
setInterval(function(){}, 50);
これがファイル内の唯一のものである場合、他に何も行われていないため、精度は非常に高くなります。SO、私たちがしていることは、この間隔で行いたい作業のみを行う特定のモジュールのプロセスをフォークすることです。関数内の唯一のものが非同期リクエストである場合、それは上記と同じくらい良いです。そのため、setInterval 関数で非常に高いレベルの精度が得られます。
1 つのファイルに次の内容が必要です。これを file1.js と呼びます。
var http = require('http');
var options = {
hostname: 'localhost',
port: 8888,
path:'/',
method: 'GET'
}
setInterval(function(){
console.log('File:' + (new Date).getTime() % 50);
//The Modulus of the time in MS should change by no more than 1 MS on consecutive runs, I confirmed this works just dandy on my system(though the first couple intervals were slower in some instances, worse I saw was a 3 MS delay)
var req = http.request(options, function (res) {
res.on('data', function (data) {
console.log(data.toString());
});
});
req.end();
}, 50);
2 番目のファイルでは、実際に必要な作業が何であれ、より多くの作業を行うことができます。重要なことは、OWN PROCESS 内に含まれる上記の作業を行うプロセスを生成することです。これにより、プロセス V8 プロセッサがこのイベント ループを非常に小さく保つことができます。CPU 上の特定のプロセスのオペレーティング システム管理の被害者のままですが、file1.js モジュールが少なくとも 1 ミリ秒ごとに注意を引くことを期待できます。次に上記の非同期呼び出しを開始する必要があるとき、呼び出し間の最大の遅延は 1 ミリ秒です (少なくとも、システムで見たのはそれだけです)。したがって、もう一方のファイルには任意の量の作業を含めることができ、非常に重要な 1 行を含めることができます。
file2.js:
var http = require('http');
var child_process = require('child_process');
http.createServer(function (req, res) {
res.write('Hi There');
res.end();
}).listen(8888);
///Do whatever else you need to do
child_process.fork('file1.js');//Add in this line!!!!
期待される出力:
File:29
Hi There
File:29
Hi There
File:30//Notice these values only increase by 0 or 1.
Hi There
File:31
Hi There
File:31
Hi There
File:32
Hi There
File:34//Uh oh, one went up by 2... not terrible
Hi There
File:35
Hi There
File:35