gpt4 book ai didi

node.js - 为什么阻塞代码比非阻塞代码表现更好?

转载 作者:搜寻专家 更新时间:2023-11-01 00:33:32 24 4
gpt4 key购买 nike

我编写了两个小的 node.js 片段,它们做同样的事情,以阻塞和非阻塞方式编写,只是为了衡量性能差异。这里是:

非阻塞(传统的 node.js 方式):

var http = require('http');
var fs = require('fs');

var app = http.createServer(function(req, res){
fs.readFile('lorem.txt',function(err, data){
res.end(data);
});
});

app.listen(8080);

阻塞:

var http = require('http');
var fs = require('fs');

var app = http.createServer(function (req, res) {
res.end(fs.readFileSync('lorem.txt'));
});

app.listen(8080);

lorem.txt 只是一个大约 33kb 大小的文本文件。

针对两者运行 apache 基准测试 显示没有差异,或者有时阻塞版本的性能更好。

ab -n 100 -c 10 http://locahost:8080/

阻塞:每个请求的时间:5.701 毫秒
非阻塞:每个请求的时间:8.401 毫秒

最佳答案

异步方法在更广泛的意义上确实具有更好的性能,即对更多(大多数)并发请求的响应时间更短。

您所做的基准测试是一个极端案例。假设您增加并发请求的数量或增加返回的响应的大小。我确信同步方法会执行得很糟糕。同步方法不好,因为响应较小,但不好,因为它根本不可扩展。普通的现代计算机可以轻松处理这种规模的读/写。如果将 filesze 增加到 1MB 会怎样?或要求 100 万?想想一台服务器,它必须处理千兆字节的存储并处理数百万个请求。

node.js 的核心概念即异步、非阻塞、事件驱动的 I/O 是为了解决像 C10k 这样的可伸缩性问题而构建的。 .你得出的结论是片面的,我相信异步方法将在现实世界中赢得 99% 的时间。

关于node.js - 为什么阻塞代码比非阻塞代码表现更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16562153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com