Я понимаю, что Nodejs использует Libuv Library для задач ввода/вывода. По умолчанию Libuv использует четыре потока для выполнения задач ввода -вывода. Я пытаюсь понять поведение LIBUV, когда запланировано более четырех задач ввода/вывода. Сделает ли поток ожидание, пока он не завершит чтение, назначенный файл, прежде чем читать другой файл, или он переключается между множеством незаконченных файлов. несколько потоков чтения < /p>
const fs = require('node:fs');
const path = require('node:path');
function getFilePaths(directory){
let files = fs.readdirSync(directory)
return files
.map((file) => path.join(directory, file))
.filter((filePath) => fs.statSync(filePath).isFile())
}
const directory = 'D:\\test-folder';
const files = getFilePaths(directory)
const streams = []
files.forEach((file, index)=>{
streams.push([index, fs.createReadStream(file)])
})
streams.forEach(([index, stream])=>{
stream.on('data', () => {
console.log(`Data: Stream ${index}`);
});
stream.on('end', () => {
console.log(`End: Stream ${index}`);
});
stream.on('error', (err) => {
console.error(`Error: Stream ${index}`);
});
})
< /code>
В выводе я ожидал, что по крайней мере один из первых четырех файлов будет полностью прочитал до получения каких -либо данных для оставшихся файлов. Вместо этого появляется, что потоки LIBUV не ждите, пока файл будет полностью прочитал перед началом чтения другого файла. < /P>
Это ожидаемое поведение? < /P>
Подробнее здесь: https://stackoverflow.com/questions/793 ... -i-o-calls