【发布时间】:2018-11-19 07:03:32
【问题描述】:
我目前正在深入学习Nodejs平台。众所周知,Nodejs 是单线程的,如果它执行阻塞操作(例如 fs.readFileSync),线程应该等待完成该操作。我决定做一个实验:我创建了一个服务器,它在每次请求时都会从文件中获取大量数据
const { createServer } = require('http');
const fs = require('fs');
const server = createServer();
server.on('request', (req, res) => {
let data;
data =fs.readFileSync('./big.file');
res.end(data);
});
server.listen(8000);
另外,我启动了 5 个终端以向服务器发出并行请求。我等着看,在处理一个请求时,其他请求应该等待从第一个请求完成阻塞操作。但是,其他 4 个请求同时响应。为什么会出现这种行为?
【问题讨论】:
-
你能告诉我们你到底看到了什么吗?
-
我想文件在第一次被读取时就被缓存了。不知道测试条件是什么。正如您已经注意到的,阻塞操作不能有并发请求。
标签: javascript node.js single-threaded