首页 > 解决方案 > fs.readFileSync 是否阻塞线程节点正在运行?

问题描述

我知道这会fs.readFileSync阻塞我的代码,但它是否也会阻塞运行 Node 服务器的线程?

fs.readFileSync只是语法糖吗fs.readFile

标签: node.js

解决方案


我认为它可能会因您的代码而异,但请考虑在您运行以下命令时发生的情况的差异:

这将是我们的服务器代码:

const http= require("http");
const fs = require("fs");

http.createServer((req, res) => {
    console.log("Got request");
    res.end("Hello\n");
}).listen(3000);

如果我们运行fs.readFileSync()并尝试加载/dev/urandom(这不会完成):

const f = fs.readFileSync("/dev/urandom");
console.log(f);

并尝试使用 cURL 访问服务器,请求将永远不会完成,因为节点被捆绑试图完成文件读取。

相反,如果我们使用fs.readFile()

fs.readFile("/dev/urandom", f => {
    console.log(f);
});

每当我们运行 cURL 时,我们都会收到一个请求,并且我们会在服务器进程中看到“Got request”,因为节点与加载文件无关。

所以回答你的问题:不,readFileSync不仅仅是readFile.


推荐阅读