fs.readFileSync是否会阻止线程Node正在运行?

时间:2018-08-30 13:55:17

标签: node.js

我知道fs.readFileSync会阻止我的代码,但是它还会阻止运行Node服务器的线程吗?

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

1 个答案:

答案 0 :(得分:0)

我认为它可能会根据您的代码而有所不同,但是请考虑每次运行以下命令时发生的变化:

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

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时,我们都会收到一个请求,并在服务器进程中看到“收到请求”,因为节点并没有绑定文件。

因此回答您的问题:不,readFileSync不仅仅是readFile的语法糖。