node + Express 服务器性能实验

本文通过实验展示了在没有多进程情况下,Node.js的单线程模型在处理CPU密集型任务(如死循环)时,会导致服务器性能急剧下降,甚至崩溃。实验结论指出,对于CPU密集型任务,Node.js表现不佳,但如果是IO密集型任务,通过异步操作和内存管理,可以有效提高服务器处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当没有多进程的情况下,node的单线程模式会导致以排队的方式处理请求,当请求多的时候,势必会消耗较多CPU时间,特别是CPU密集型,或者烂的代码,比如一个会导致死循环(不知道会不会发生死锁之类的状况)这样的bug,整个服务器就直接宕掉。

app.get('/1',function(req, res) {
    res.json({ title1: 'OK' });
});

app.get('/2', function(req, res) {
    while(true) { /* 表示大量的CPU时间 */ }
    res.json({ title2: 'OK' });
});

先访问/1,证明服务器没问题
访问/2,浏览器一直在转圈
在访问/1,也出不来了

实验结论:node对于CPU密集型(比如说写一个死循环)并不是无力的,而是直接死。。。

查询数据时间和各种资源调度时间忽略不计
一个用户等待的时间 >= 排在前面所有任务的CPU运算时间之和
如果要想浏览器等待一个资源响应的时间不能超过100ms,这里网络IO可能花掉50ms,10000个请求,每个的运算时间为5us=5*10^-6 s,一个3.2GHz的CPU(然而,单线程对多核CPU的利用并不理想),3.2GHz=3.2*10^9 Hz,也就有16K个指令周期,即便不用做解释,也许require的时候做过预编译,毕竟不是机器码,估计也做不到汇编层面上的优化,还有GC时间stop-the-world,16K也不是很多。
然而,考虑到现实情况,查数据的时间会更长,还要和DB进行IO,运算时间花的很少,IO又是异步的,这样就可以接受更多的请求,那么,就可能需要分配更多的内存作缓存区,内存用多了又被分页、调虚拟内存。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值