【问题标题】:How is memory management in PHP different from that in Python?PHP 中的内存管理与 Python 中的内存管理有何不同?
【发布时间】:2011-05-27 21:46:51
【问题描述】:

它们的处理方式有什么不同?

具体来说,为什么 Python 在生产级长寿命应用程序(如 Web 服务器)中很常见,而 PHP 却没有类似的效率水平?

【问题讨论】:

  • PHP 在 5.2/5.3 系列之前的内存管理相当糟糕。垃圾收集器无法破坏循环引用,因此内存泄漏很常见且难以跟踪。这使得 PHP 不适合长时间运行的脚本。
  • 谢谢!你会说这在 5.2/5.3 系列中是“固定的”吗?
  • 嗯,垃圾回收机制改进了很多。它是否算作“固定”是另一回事。 GC 一开始是一项昂贵的操作,现在必须处理循环引用使它变得更慢。当然,如果您的脚本从不需要完成 GC 运行,您可能永远不会注意到差异。
  • 再次感谢...我想它可能处于一个阶段,现在基准测试将成为一个合理的选择,用于确定它与 Python 在类似的长期任务中的比较情况。

标签: php python memory-management garbage-collection webserver


【解决方案1】:

PHP 被设计为一种超文本脚本语言。每个过程都设计为在很短的时间后结束。所以内存管理和GC基本上没关系。

然而,PHP 的易用性和流行性使其在长期存在的程序中得到了应用,例如守护程序、大量计算、套接字服务器等。

PHP 5.3 引入了许多功能和修复,使其适用于此类应用程序,但我认为内存管理在这方面的重要性较低。

PHP 的错误管理现在已经相当不错了,但正如我所知道的所有编程语言一样,您可能会产生内存泄漏。

您仍然无法以编写 Java 或 Python 应用程序的相同风格进行编码。许多 PHP 程序可能会出现 Java/Python 没有的严重问题。

您可以将其描述为“更糟”,但我不会。 PHP 只是一组不同的工具,您必须处理不同的东西。

我工作的公司有很多用 PHP 编写的系统程序和守护进程,它们运行起来很神奇。

当谈到您描述的“生产级长寿命应用程序”时,我认为 PHP 最大的警告是它的多处理和线程能力(第二个基本上不存在)。

当然有可能派生进程、访问共享内存、进行进程间通信以及拥有消息队列等。但 Python 在这方面遥遥领先,因为它是自下而上为此类工作设计的。

【讨论】:

  • +1 表示“没有好坏”的评论。更多人需要这样的观点。
  • 在我看来,缺少线程是最大的问题。我已经将 PHP 用于许多持久性程序,但从来没有从适当的多线程程序中受益。我真的不认为内存或速度与任何流行度差异有太大关系,至少从 5.3 开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多