同样的业务和硬件设备,PHP跑的时候cpu使用率很高,如果换成node.js,cpu使用率会降低吗
发布于 9 年前 作者 coderq 6164 次浏览 最后一次编辑是 8 年前 来自 问答

最近有个人问我这个问题,我给出的回答是不会,因为PHP和node.js都是一个工具,他们的工作是将业务转换为cpu可以识别的语言,也就是说不管用什么语言,cpu承载的业务并没有降低,自然使用率并不会有太明显的降低,如果要降低cpu使用率,增加cpu分摊业务量,使用率才会有明显的降低。各位大大,我这个回答是否正确。

15 回复

理论上,不会吧?

我的理解是,node.js通过异步的方式可以保证用户的请求不会因为部分请求的阻塞而变的缓慢,但对于cpu的压力并没有太多改善的地方,cpu降压依然需要采用增加服务器和负载均衡来解决。

如果限定同样的业务模式,不同的语言实现,CPU负载肯定会有差异,异步模式的优势就是强于阻塞模式的多线程

node 的语言执行效率比 php 高,还是有可能的。

php是每次读取解析,node.js是解析好了在内存中运行,再加上 v8 引擎,效率高想来是必须的。

换成nodejs,内存占用会上升

@alsotang node的异步IO不会让程序卡在IO上面,会充分利用cpu,理论上node程序cpu利用率更高吧

@showen 别人的程序卡io的时候,cpu是休息的啊。

@alsotang 不说完全休息 考虑到切换上下文环境所耗 理论node更充分利用了cpu啊

我觉得要具体分析才能知道,假如 “用PHP跑的时候cpu使用率很高” 主要是因为线程上下文切换或忙等等原因造成的,那么改用 nodejs 之后应该会有较大的改善,当然,nodejs 内存占用多半会更高。

做个profiling看看高在什么地方

很多场景下估计nodejs会更高(表示利用率高)。

同样一个业务,用php的问题在于IO的串行等待而导致处理时间过长,从而并发处理能力下降(fcgi进程数有限),cpu利用率上不去(这就是php程序很多时候tps上不去而cpu还很闲的原因)

而用nodejs,号称强大的异步IO,那处理同一个业务逻辑,时间必然会减少(cpu运算并没有明显区别),意味着并发能力强(“同时”执行的任务就多),从而cpu会更忙(峰值时)

@showen 这倒也是。

说起来,方方面面好像 node 都比 php 省。不仅语言效率高,而且还省了上下文切换。

高性能Web服务端 PHP vs Node.js vs Nginx-Lua 的对比分析 http://www.cnblogs.com/pangguoming/p/4029758.html

刚看到这里有张图,node相对php是开始高,后来低,应该是很快的完成工作,后面就休息了吧。

回到顶部