是不是好比C比Java更有效率一样?是两种语言最初底层设计不一样的缘故吗?
回复内容:
效率是开发效率还是运行效率?
如果是运行效率,我觉得这句话首先就应该加一个前提:在使用复杂框架的情况下。我认为没有这个前提这句话就不成立。
PHP 一开始就为 Web 开发而设计,同时面向的使用者是广泛群体,所以入门简单,运行时环境设计也简单,甚至垃圾回收机制也是求简设计的。众所周知,一个 PHP 脚本的完整生命周期就是从一个请求开始,到该请求结束。这导致了全局性质的复用机制不可用,例如前端控制器模式(Front Controller)是现在很多 Web 框架都会采用的模式,但 PHP 中使用就会导致每次请求都要初始化一个庞大的框架的问题。而在 Python 中,即使是 Django 这样的大型框架,本身框架只需要一个进程初始化一次,随后就可以处理多次请求。我个人认为这一点是用了框架之后不少 PHP 应用性能会比 Python 应用要差。
如果说拿 C 和 Java 比,我反而觉得 PHP 和 Python 之间不是这种关系。二者都是解释型语言,二者都可以缓存字节码(PHP 需要通过 APC 扩展,保存在共享内存;Python 需要文件所在目录可写,保存为 pyc 文件),唯一有点差距的可能是 Python 的垃圾回收机制更强大,这点也可以理解,因为 Python 不像 PHP 一样为短生命周期的运行设计,内存无法及时释放是难以忍受的。所以如果一定要套 C 和 Java 的关系,我觉得 PHP 才对应到 C,Python 对应到 Java,因为后者还需要为更复杂的垃圾回收付出额外开销。
另外,在一些特殊前提下,PHP 和 Python 做出的 Web 应用的性能差距还会非常大。比如在使用 tornado 一类通过 epoll 实现异步的框架,可以承受高并发、做低耗的长连接等,这点 PHP 还很难模仿,其原因在于 PHP 更像是一个人人可用的套餐,封装好了一套操作(内置函数等),但并没有提供系统编程的途径。
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn