我生成了许多内容相同且大小为150M的文件。我使用fs.readFile
异步API像这样读取它们:
const fs = require('fs');
const COUNT = 16;
for (let i = 1; i <= COUNT; ++i) {
console.time(i);
console.log(process.hrtime());
fs.readFile(`a${i}`, (err, data) => {
console.log(process.hrtime());
console.timeEnd(i);
});
}
我将ENV变量UV_THREADPOOL_SIZE
设置为1,然后将COUNT
更改为8、16,甚至更改为128。但是回调似乎几乎是在同一时间触发的。对于128,时间大于4s。
我只测试了1个文件,大约需要60毫秒的时间。该屏幕截图是8个文件的结果:
在我的内存中,异步fs.readFile
API由线程池处理。因此,我将池大小更改为1。
并且在NodeJS事件循环中,轮询阶段将处理IO事件并为其执行回调。我忘记了轮询阶段将阻塞事件循环多长时间。但我猜不到4秒。
因此,对于上面的代码,由于轮询大小为1,我想我们将一张一张地读取所有文件,对吗?如果读取了一个文件,则回调将在下一个轮询阶段执行(对于128个文件,时间将超过4s,所以我猜将会有一个下一个轮询阶段)。然后我们将在控制台中获得时间。
但是我不理解输出。似乎回调几乎同时触发。
我是否对事件循环中的轮询阶段或线程池有所了解?
使用util软件包并尝试“ var util = require('util');”