❏ 站外平台:

PHP 不如 C++ 吗?

作者: @韩天峰-Rango

| 2015-09-07 10:37   评论: 4 收藏: 2    

昨天和一个前同事聊天,各种吐槽PHP,吐槽Swoole,他认为PHP到处是坑,PHP局限很大。PHP+Swoole不适合做高并发服务器,C+Swoole才是最好的方案。C++有各种数据结构,C++可以开线程,C++可以共享对象。看来有必要好好得说明一下了。

PHP比C/C++或Java少了什么?多线程,多线程,多线程……

是的。PHP比C/C++、Java少了多了多线程。PHP只有多进程的方案,所以PHP里的全局变量和对象不是共享的、数据结构也不能跨进程操作、Socket文件描述符不能共享等等。所以PHP有局限?

多线程看似比多进程要强大很多,实际上我可以负责任的告诉你,多线程带来的坑更多

  • 数据同步问题会让你崩溃的。要么就牺牲性能到处加锁,要么就用地狱难度的无锁并发编程,据我所知目前国内能掌握此项技能的人凤毛麟角。
  • 不要以为加锁就万事大吉了,你会在死锁问题上栽个大跟头。当你的程序逻辑复杂后,锁越来越难控制了,一旦死锁你的程序基本上就完了。
  • 某个线程挂了那所有线程都会退出

反而在看多进程,其实就简单的多了。

  • 配合进程间通信,基本上你可以实现任意的数据共享。比如利用一个进程专门存数据结构和对象,其他进程的数据操作全部投递到此进程来
  • 多进程不需要锁
  • 多进程可以使用共享内存的数据结构实现一些多线程的功能。如Swoole提供的Table、Atomic可以实现数据共享,但成本很低。未来还会加入共享内存队列

所谓PHP限制了Swoole,这完全是无稽之谈。合理利用Swoole提供的Table、Atomic、SendMessage/PipeMessage、Task完全可以实现异步非阻塞的代码逻辑。

C++写出来的程序性能更好?

这完全是盲目的迷信,密集计算的程序C++确实是有优势的。而并发服务器核心是IO,并非大规模密集运算。C++从语言层面来看并没有什么优势。另外C++中的大部分数据结构在PHP中都有对应的实现,实在不行自己写个专门的扩展也能解决之。

高并发的服务器单机能维持10W连接、每秒可处理3-5W笔消息收发。这种性能水准已经可以应用在BAT的核心系统上了。

开发效率快的意义是什么?

这位同事还说PHP开发Server虽然比C++快了,但是追求性能的极致还是要用C++。我要告诉你效率高了究竟意义何在。开发一套好程序不是一件容易的事情,需要程序员投入大量时间和精力。开发效率提升的意义并不是简单的我可以更少时间完工,而是剩下的时间你可以增加单元测试、修复BUG、提升用户体验、完善细节、提供配套工具、优化性能、增加关键日志、增加监控报警、增加容灾方案。

(本文作者是 Swoole 的创始人, 原文标题:“关于C++、PHP和Swoole”)



最新评论

来自云南昆明的 Internet Explorer 11.0|Windows 7 用户 2015-09-08 18:10 4 回复
PHP是世界上最好的语言。我说还不行(⊙_⊙)?
来自广东深圳的 Firefox 40.0|Windows 7 用户 2015-09-08 09:53 5 回复
如果“程序员的G点就是怕别人说自己的语言或者工具不如XXX”这么看那些程序员水准还不够呢,现在这年头往深里面搞都是多语言,多工具应用了,本来熟练掌握一门以上语言之后熟悉其它语言就飞快了,如果纠结在语言上就很麻烦,圣战嘛其实已经脱离语言的使用的
来自湖北武汉的 Iceweasel 38.2|GNU/Linux 用户 2015-09-07 12:30 19 回复
国内的这种讨论基本停留在“你跟他讲国际惯例,他跟你讲中国国情;你跟他讲中国国情,他跟你讲国际惯例”的扯淡节奏上,总之我用的语言最牛X,你搞不定是你水平太臭;你说的缺点我都能避免。

国外真正的大神也许掌握了很少语言,但是人家是用编程解决了问题,比如linus应该不会把java、ruby、php全学了一编回来写篇文章鼓吹c,RMS应该不会把java、ruby、php全学了一编回来写篇文章鼓吹lisp,这样做的人也就只有搬砖之余把生活的怒火喷向网络的程序员中的战斗鸡,一般都是想在嘴炮中力求存在感与优越感的loser。

Talk is easy, show me y
来自湖北武汉的 Iceweasel 38.2|GNU/Linux 用户 2015-09-07 12:11 16 回复
程序员是最无聊的群体,整天圣战,非要分出个1234,喷了这么久也没结果,何必呢???  程序员的G点就是怕别人说自己的语言或者工具不如XXX,天天忙着到处对喷打嘴仗,难怪没有女朋友!!!!

好好搬砖不好么???

返回顶部

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。