【发布时间】:2016-05-21 17:11:27
【问题描述】:
我编写了以下 node.js 程序(Ubuntu 14.04 上的节点版本 6.2.0)以了解有关 node.js 中 libuv 线程池的更多信息。在程序中,我正在读取两个大小为 10KB 的文本文件。成功读取文件后,我正在执行一些计算密集型任务(在回调中)。
var log4js = require('log4js');// For logging output with timestamp
var logger = log4js.getLogger();
var fs=require('fs');
fs.readFile('testFile0.txt',function(err,data){//read testFile0.txt
logger.debug('data read of testFile0.txt');
for(var i=0; i<10000; i++)//Computing intensive task. Looping for 10^10 times
{
for(var j=0; j<10000; j++)
{
for(var k=0; k<100; k++)
{
}
}
}
});
fs.readFile('testFile1.txt',function(err,data){//read testFile1.txt
logger.debug('data read of testFile1.txt');
for(var i=0; i<10000; i++)//Computing intensive task. Looping for 10^10 times
{
for(var j=0; j<10000; j++)
{
for(var k=0; k<100; k++)
{
}
}
}
});
根据我对libuv线程池的理解,应该立即读取这两个文件,并且打印语句“testFile0.txt的数据读取”,“testFile1.txt的数据读取”之间的时间差应该非常小(在毫秒或最多一秒),因为默认线程池大小为 4,并且只有两个异步请求(文件读取操作)。但是,打印语句“testFile0.txt 的数据读取”和“testFile0.txt 的数据读取”之间的时间差相当大(10 秒)。谁能解释一下为什么时差这么大??回调中正在执行的计算密集型任务是否会导致较大的时差?
【问题讨论】:
标签: node.js threadpool libuv