3

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

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

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

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

是否有一个很好的文档来讨论 php 作为 thttpd 的模块的行为?

4

1 回答 1

1

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

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