就内存使用而言,PHP 作为 thttpd 模块 vs CGI

Posted

技术标签:

【中文标题】就内存使用而言,PHP 作为 thttpd 模块 vs CGI【英文标题】:PHP as a thttpd module vs CGI in terms of memory usage 【发布时间】:2010-09-18 19:21:23 【问题描述】:

我打算在嵌入式环境中使用 php。我们当前的网络服务器是 thttpd。我现在正在考虑两种选择:是将其作为 cgi 还是作为 SAPI 模块运行。我知道 cgi 在安全性方面具有优势。但是如果我们要使用 php 作为 cgi,则每次请求都应该将 php 的实例加载到内存中。

我尝试将其编译为 thttpd 的 SAPI 模块,并且我观察到 thttpd 的内存使用量,特别是 rss,不会随着请求数量的增加而增加。

谁能解释一下 thttpd 是如何加载 php 的?它是否只加载一次并在 thttpd 运行时一直驻留在内存中?如果是这样,我们可以将其视为 cgi 的替代方案。

它是否执行多线程,即是否同时有多个 http 请求?还是一次处理一个请求?

有没有很好的文档讨论 php 作为 thttpd 的模块的行为?

【问题讨论】:

【参考方案1】:

我没有使用 thttpd 的经验,但这里有一些建议:

PHP 引擎是线程安全的,但某些扩展却不是,因此人们通常不愿在多线程环境中使用它,而是采用单进程 - 单请求方法 是的,通常网络服务器模块(如 Apache mod_* 的东西)通过保持常驻来工作,但 PHP 的最大减速是它需要解析源文件(或者甚至多个源文件,如果你使用 include / require)每个请求。您可以使用 APC 之类的东西来减少这种情况,它会缓存文件的解析版本 还有一个称为 FastCGI 的协议,您可能想看看它 - 它基本上是模块和 CGI​​ 解决方案之间的交叉 - 它启动了几个进程,每个进程托管一个 CGI 问题的实例(PHP在这种情况下)并使用它们来处理请求。实例被回收(即它们可以一个接一个地处理多个请求)。

【讨论】:

以上是关于就内存使用而言,PHP 作为 thttpd 模块 vs CGI的主要内容,如果未能解决你的问题,请参考以下文章

移植 thttpd Web 服务器

thttpd和cgilua安装与运行流程分析

thttpd 在S3C6410的移植-web服务程序的应用

就内存使用而言,模板 + 仿函数/lambdas 不是最理想的吗?

HTTP协议 keep-alive连接 与 BS(firefox-thttpd)实验

就jQuery ajax调用而言,php echo和return之间的区别[关闭]