golang VS php 性能对比

神仙 发布于 2013/12/19 22:24
阅读 31K+
收藏 14

原文 http://www.isno.cn/2013/12/golang-vs-php/

在工作的项目中,我的主要开发语言是php,因需求或者为弥补php的缺陷,需要为php做各种各样的扩展,比如php本身不支持线程,没有队列,进程也不无法用于生产环境, 可以说php没有任何“程”,因而网上有较多的文章阐述如何实现php队列,多线程等等,在我的理解,与其用php本身实现这种无法保证健壮的特性,不如去发掘运用一些本身集成,且表现优异的语言

微博中了解到了golang语言, golang的语法类似 C和python, 有这两种语言经验的同学入门会比较顺利! golang语言的优点在这里就不一一阐述了!!
学习了一段时间之后,维护的业务正好遇到瓶颈,另因我维护的业务属于接口层,逻辑比较简单,只输出json数据,所以开始着手利用golang重构现有系统,改造中,因部分同事对golang比较怀疑,另外网上的性能对比,大部分只是hello word输出,参考意义很小,所以利用线上两台内网机器,做了一次php和golang的正式业务性能对比

服务器配置 : 16核 E5620 @ 2.40GHz 11G内存
业务包含:DB(oracle)和 redis查询, 当有缓存之后,DB不再查询,直接读取redis, 批量查询两个主键

使用apache的ab测试 并发200,20000个请求

golang 并发测试
golang的qps 大约在 9675/s, 最高10200/s 左右 ,cpu利用率高峰在10.6% 上下 golang开启了多核, 并且维护了40个redis连接池

上面php的链接是golang的url重写,为了兼容php的项目,不要误解!

PHP并发测试
php的QPS大约是 1726/s, 最高2100/s 左右, cpu 高峰在50.1% 比较恐怖

另外也测试了更多主键的批量查询, golang的处理能力降到 4700/s, php到 1078/s, 将ab并发加到400时, php开始出现请求失败的情况,
golang的并发加到2500后,惊讶其表现依然出色, 有怀疑的可以自行测试

上面的测试结果得出的结论: 因多核利用,golang的”多线程”, 还有redis连接池, 使得go在和php并发对比中遥遥领先,处理能力大约是php的4倍

所以建议维护着请求量较大,遇到瓶颈项目的同学可以尝试使用golang改善!

以下是话题补充:

@神仙:看了评论,这篇文章务必要补充一下 : 做对比的不是为了证明php处理能力低下, 而是证明在高并发的场合下golang可以做的更好。在KV数据库的应用中,DB的并发也不再是瓶颈, 希望在遇到性能问题时,不是一味的加机器去解决! 另外对于断章取义,一味嘲讽诋毁的人说再多也是对驴弹琴, 就不再一一解释了! (2013/12/20 10:08)
加载中
2
jefferywu
jefferywu
内容都不用看,PHP输了,Go赢了
1
开源中国首席鉴定大湿
开源中国首席鉴定大湿

其实这两者没有可比性的说~~~

golang的性能不是脚本语言能比的

几乎所有的编译语言的性能都不是脚本语言能比的

当然,每个语言都有他自己的优、缺点。不能说什么语言就是绝对的优秀

我对楼上那位朋友的质疑表示不解

1
马太航
马太航

编译型语言和脚本语言对比WEB并发场景貌似不能这么下定论吧。


只测试并发场景?一个是通过web创建线程实现并发,一个是通过数据结构实现并发,能比吗。

飞酒
飞酒
哥们你搞错你用php或者golang的意义了吧, 人家只是单纯的比性能, 你撤其他干嘛, 一点追求都没
1
max佩恩
max佩恩

楼主写得这么好的对比文章,又有示例、数据,大家还要打击。。。虽然明显知道PHP不如Go快,但多了解一些客观数据不是更好吗?

蜡笔小新的史卢比
像你这种恶意黑的 就不要误导人了 https://my.oschina.net/matyhtf/blog/336386
0
宏哥
宏哥

又一个"大牛" 的hello world 性能测试.

宏哥撒尿的时候, 初始加速度 比 美国的航天飞机都要厉害

meDevil
meDevil
什么都不说,绝对支持宏哥。
回去干活
回去干活
回复 @神仙 : 你这个HELLO WORLD完全坑爹阿.拿实际项目来说,例如在GO语言一个动作里面搜了100条SQL,PHP中只搜了一条SQL,来测试.看看哪个快.
noday
noday
跟php比性能,我
开源中国最帅没有之一
开源中国最帅没有之一
我就这个同意宏哥的,一个编译语言和脚本语言比?好玩吗?闲的蛋疼,觉得慢可以不要用。那个脚本语言有“程”?
神仙
神仙
文章只有看完了才有发言权对吧?
0
yak
yak
nodejs/lua是php的2倍

0
eechen
eechen
PHP从来都不是以性能取胜的,上千的QPS其实已经能满足大多数要求。
况且Go自己实现了HTTP Server,而PHP-FPM还需要和Nginx进行FastCGI网络通信,系统整体的CPU使用率自然会更高。


PHP-FPM的网络模型类似于Apache Prefork,即一个master进程,多个worker进程,这些进程均为单线程进程,不需要系统级的多线程调度,Linux上可以使用taskset把PHP-FPM进程绑定到特定CPU核心。

PHP Script经过parse(解析)和compile(编译)才能生成可以在ZendVM上execute的OPcode(中间码).开启OPcache扩展后,初次生成缓存时要比不开OPcache慢,但以后命中缓存时相当于省去了parse和compile这两步,速度会有明显的提升.PHP会定时检查PHP脚本时间戳,查看是否修改,以决定是否需要重新生成缓存,有一定的开销,但可以禁用和设置黑名单.从运行机制上来看,PHP的运行模式和Java是非常类似的,都是先产生中间码,然后运行在不同虚拟机上.

大话PHP性能-百度技术博客(对应百度贴吧从后端C到前后端LAMP化的架构转型)
http://stblog.baidu-tech.com/?p=1343
http://pan.baidu.com/share/link?shareid=411476053&uk=4027823585

PHP本身性能也很不错。简单功能下能够达到5000QPS(50CPU IDLE),极限也能过W。

飞酒
飞酒
回复 @eechen : 回来看到你的回复,hhvm确实思路挺好
飞酒
飞酒
回复 @蜡笔小新的史卢比 : 看环境, 小哥, 你19年跟14年比,也是没谁了, 不过我确实没你厉害
蜡笔小新的史卢比
回复 @飞酒 : 那说明你PHP太菜了 我开了opcache单机破3K 垃圾就不要甩锅给语言啦
eechen
eechen
回复 @飞酒 : 如果你真的非常需要高性能,你可以试试Facebook开发的HHVM,能够即时编译动态生成、缓存、运行机器码。HHVM官方的WordPress测试结果:HHVM FastCGI热身后是PHP-FPM的性能的40倍(Requests per second对比)。
eechen
eechen
回复 @飞酒 : 上面我引用的是百度技术博客的测试数据。这里还有个测Hello World的,PHP-FPM的Requests per second能达到1万7千多:http://bluehua.org/demo/php.node.lua.html
下一页
0
Vian
Vian

专门找个编译语言来黑脚本语言的性能是么?

我就呵呵了

0
南湖船老大
南湖船老大
编译语言和脚本完全没法比
0
yak
yak
测试代码呢
返回顶部
顶部