gpt4 book ai didi

php - 当我在 IO 操作上对 Node.js 进行基准测试时,为什么 PHP 比 Node.js 更胜一筹?

转载 作者:可可西里 更新时间:2023-11-01 17:00:26 26 4
gpt4 key购买 nike

我正在使用 apache 基准测试工具在 PHP 和 Node.js 上分别在端口 80 和端口 8000 上运行基准测试。下面的 Node 基准测试命令,在 PHP 上运行测试时换出端口:

ab -n 100 -c 100 http://localhost:8000/

我在程序中所做的只是读取一个 10MB 的文本文件,然后将其发送回客户端。令我惊讶的是,PHP 基准测试大约需要 6 秒,而 Node.js 则高达 13 秒。

这是文本文件:

https://github.com/jamesward/play-load-tests/blob/master/public/10mb.txt

这是每个的代码:

Node.js

var http = require("http");
var fs = require("fs");
var s = http.createServer(function(req, res) {

res.writeHead(200, {"content-type": "text/plain"});

fs.readFile("./10mb.txt", "utf8", function(err, data) {

res.end(data);

});


});

s.listen(8000);

PHP

<?php

echo file_get_contents("./10mb.txt");

我在 Node 代码中做错了什么吗?否则我很困惑,Node 的主要卖点之一是它在 OI 操作中速度很快。我错过了什么?

最佳答案

PHP 将以多线程方式运行,因此 100 个请求中的一些将是并行的。

Node.js 是单线程但异步的。通常这种权衡是 Node.js 的胜利,因为它会消耗更少的 RAM 并导致更少的上下文切换。然而,在这种情况下,您正在将大量数据 (10mb) 读入 RAM,然后将其发送出去。

node.js 中的内存操作是同步的。因此,虽然文件读取和套接字写入操作都是异步的,但其中有一个巨大的 memcpy 有效地阻止了解释器。

在 node.js 中处理非常大的数据的正确方法是使用流:

var s = http.createServer(function(req, res) {
var readStream = fs.createReadStream("./10mb.txt");

res.writeHead(200, {"content-type": "text/plain"});

readStream.pipe(res);
});

关于php - 当我在 IO 操作上对 Node.js 进行基准测试时,为什么 PHP 比 Node.js 更胜一筹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645731/

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