我知道fs.writeFile()
是异步的,会被延迟执行。
例如:
fs.writeFile()
console.log("non-blocking") // last statement of an event handler function
将立即打印non-blocking
,然后该线程将花时间执行写入文件的操作。
但是,如果NodeJS App是单线程的。线程启动执行console.log("non-blocking")
后执行写文件的操作。虽然阻止状态为延迟,但该主题似乎仍然被阻止。如果console.log("non-blocking")
被fs.writeFile
替换,阻止应该在fs.writeFileSync
之前发生。当我在这里使用fs.writeFile
时,当该事件处理程序的最后一个语句完成并且文件写入操作开始时,阻塞似乎仍然存在。
在启动文件写入操作时,线程是否被阻止?或者阻塞将在主线程中发生。如果是这样,有没有办法避免它?
我不认为问题与How the single threaded non blocking IO model works in Node.js相同,因为这个问题主要是关于NodeJS如何与操作系统交互来进行文件操作。
答案 0 :(得分:3)
只有一个线程...代码。 nodejs应用程序包含/调用其他线程为您执行操作(主要是IO)并在事件上调用您的用户线程。
当您执行fs.writeFile
时,操作将被提供给处理该操作的另一个本机线程。如果您回调fs.writeFile
,您的用户线程将被唤醒以执行它。此异步IO操作管理的核心是libuv。