0

我使用 Java webapps 已经有一段时间了。我想知道基于 PHP 的 webapps 与基于 Java 的 webapps 有何不同。我可以找到一些关于安全性、库的可用性等方面的差异,

基本上,基于 Java (servlet) 的 webapps 是多线程环境,其中一个进程可以满足不同请求的需求。这在 PHP 中是如何工作的?

a) 每个请求都是一个进程吗?在这种情况下,我们如何确保内存利用率和其他共享资源受到控制?

b) 在基于 PHP 的 webapps 中是否有一个名为 application scope/singleton 的概念?

c) 我们可以有连接池吗?

基本上,PHP 与 CGI 有何不同?

对于 PHP 开发人员来说,这个问题可能听起来很愚蠢。我很高兴知道已经有一个地方记录了差异。谢谢。

4

1 回答 1

2

Java Web 应用程序托管(即在其中运行)有状态的、长时间运行的 Java 进程;因此,您可以利用内存中的对象缓存和操作线程的能力。

标准 CGI 模型(暂时忽略 FastCGI)相当简单:启动一个进程并传递传入的 HTTP 请求。CGI 进程自己处理请求(包括创建自己的线程,如有必要),然后将 HTTP 响应返回给生成子 CGI 进程的进程。然后 CGI 进程被终止 - 所以任何保存在内存中的东西都会丢失,并且必须序列化到某种持久性介质,例如磁盘上的数据库或文件。

(推测:CGI 的设计可能与 1990 年代初期服务器上可用的资源有限有关,以及网站如何不经常访问,因此使用这样的内存没有意义;最后,如果你正在研究一个巨大的可扩展项目,那么您可能不会对内存缓存感兴趣,因为您将拥有一个专用的状态服务器)。

PHP 是一个 CGI 系统,因此它继承了“一个请求一个服务器进程”模型的限制——至于不支持线程:这似乎是 PHP 开发人员的一个有意识的决定,因为它极大地简化了系统(无需担心例如,同步,并且因为 PHP 可能是当今排名第一的“初学者语言”,所以不要给他们足够的绳索来吊死自己是有道理的)——此外,如果您需要在 web 服务场景中使用多线程,那么 PHP 可能是首先使用错误的工具。

PHP 与 CGI 没有什么不同 - PHP 实现了 CGI。Java 网络服务器不使用 CGI(至少不为 Java 应用程序提供服务,请注意确实存在 Java servlet 主机的 CGI 实现,但我们不要让事情复杂化)。

因为 PHP 不是有状态的,这意味着它不能池化连接——但实际上这不是问题。当您将 PHP 与 MySQL 配对时,您会发现操作非常便宜。您可以连接到数据库,从 SELECT 中获取一些数据,并在 5 毫秒内返回格式精美的 HTML 表格,即使在十年前的机器上也是如此。只要页面生成时间保持在 30 毫秒以下(我个人对良好用户体验的客观时间限制),您使用什么平台都没有关系。

于 2012-09-21T06:05:47.100 回答