原文 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改善!
其实这两者没有可比性的说~~~
golang的性能不是脚本语言能比的
几乎所有的编译语言的性能都不是脚本语言能比的
当然,每个语言都有他自己的优、缺点。不能说什么语言就是绝对的优秀
我对楼上那位朋友的质疑表示不解
编译型语言和脚本语言对比WEB并发场景貌似不能这么下定论吧。
只测试并发场景?一个是通过web创建线程实现并发,一个是通过数据结构实现并发,能比吗。
楼主写得这么好的对比文章,又有示例、数据,大家还要打击。。。虽然明显知道PHP不如Go快,但多了解一些客观数据不是更好吗?
又一个"大牛" 的hello world 性能测试.
宏哥撒尿的时候, 初始加速度 比 美国的航天飞机都要厉害
况且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
专门找个编译语言来黑脚本语言的性能是么?
我就呵呵了