当前位置: 首页 > 科技观察

PHP不如C++吗?

时间:2023-03-13 11:42:01 科技观察

昨天跟以前的同事聊天,各种吐槽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的核心系统。开发效率快是什么意思?同事还说虽然PHPServer的开发速度比C++快,但是C++仍然是性能最好的选择。我想告诉你什么是高效。开发一个好的程序并不是一件容易的事,需要程序员投入大量的时间和精力。提高开发效率的意义不仅仅是我可以用更少的时间完成项目,而是在剩下的时间里你可以增加单元测试,修复bug,提升用户体验,完善细节,提供配套工具,优化性能,增加关键日志,增加监控告警,增加容灾解决方案。(本文作者为Swoole创始人,原标题:《关于C++、PHP和Swoole》)原文:http://rango.swoole.com/archives/473作者:@韩天峰-Rango