`fs.readFile`是否等效于`setTimeout(fs.readFileSync)`?

问题描述 投票:0回答:1

一般说明是异步文件读取更快。我想知道的是,是否存在使fs.readFilefs.readFileSync根本不同的底层实现细节,或者是否将“同步”调用置于异步上下文中使其与读取的异步文件没有区别。

谢谢!

node.js filesystems
1个回答
0
投票

fs.readFile是否等于setTimeout(fs.readFileSync)

不,两者根本不一样。 fs.readFileSync()在readFile操作的整个过程中阻止事件循环和所有其他执行。将其放入setTimeout()只会在其运行时发生变化,而不会改变在读取文件的整个过程中(事件运行时)事件循环仍被阻止的事实。

另一种说法,setTimeout()仅影响它的运行时间(到将来的某个时间),它在实际运行时不会将其执行移出主事件循环。

fs.readFile(),另一方面,会在javascript线程之外(使用libuv中的本机线程)读取所有文件,并且是非阻塞的。您调用fs.readFile(),它立即返回,使您的代码可以执行其他操作。在读取文件时,可以处理其他事件,并可以运行其他代码。读取文件时不会阻止事件循环。然后,在读取完整个文件后,将在事件循环中发布一个事件,并且将在文件读取完成时通知主Javascript线程。

[我想知道的是,是否存在使fs.readFile与fs.readFileSync根本不同的底层实现细节

是的,有根本区别。 fs.readFile()是异步的,并且在与Javascript线程不同的线程中读取其文件。它是非阻塞的。在其他线程中读取文件时,可以运行其他Javascript。

fs.readFileSync()正在阻止。这意味着在读取文件的整个过程中,事件循环被阻止并且没有其他Javascript可以运行。

© www.soinside.com 2019 - 2024. All rights reserved.