关于被称为Apache的zts模块

在进行环境构建时,找不到模块。

我找到了一个名为libphp5-zts.so的东西,想着它能代替libphp5.so使用,于是我放了进去,然后打开了phpinfo,发现可以用,我觉得可以了,于是继续工作。但是之后无论如何都无法加载php-mysql和php-gd,只好无奈地开始寻找libphp5.so。下文是关于我找到并创建它的故事。

接下来我将讲述在搭建验证环境时我遇到的关于zts的困惑。

ZTS的真相是什么?

ZTS(Zend Thread Safe)是在MPM中负责管理多线程模型的模块名称。

只有这个,我根本不知道是什么鬼东西。

首先,MPM是什么?

MPM(多处理模块)的简称。
Apache是网络服务器。要处理多个客户端的请求,需要并行处理。而且,并行处理有不同的类型,为每种类型准备了各种模块,人们称之为MPM……就是这样。

下面展示了并行处理模型。

多进程模型 (duō mó

将来自客户端的请求复制并生成为子进程,并将请求处理委托给该子进程的方式。由于子进程生成在父进程的地址空间内,因此响应比较慢。但是,由于内存空间在每个进程中是独立生成的,这样可以更容易地嵌入脚本语言,并且不需要考虑资源竞争等问题,这是它的好处之一。

多线程模型

听说有两种类型,一种是在收到客户端请求后生成线程,另一种是提前生成线程以便预料到请求。与进程不同,线程生成不会产生副本操作,因此开销较小。因为线程在共享内存空间中使用,所以需要考虑避免资源竞争。

事件驱动模型

与上述的两种多模型不同,它不具备首先等待请求并返回响应的序列。它在一个进程中进行处理。由于不使用进程或线程,它的优点是不消耗内存。机器的核心性能起决定作用。

预派生和工作进程

<IfModule prefork.c>
  LoadModule php5_module /etc/httpd/modules/libphp5.so
</IfModule>
#<IfModule worker.c>
#  LoadModule php5_module modules/libphp5-zts.so
#</IfModule>

在模块的指令中,允许选择多模式。其中prefork代表多进程,worker代表多线程。

我认为您将能在 /usr/lib/php/module/ 中找到所有以 mod 开头的模块,但这些模块都是针对多进程的,而不支持多线程。在我个人的经验中,我将 libphp5-zts.so 模块放在该路径下并通过 phpinfo 进行显示和运行,这可能是因为 PHP 本身在运行,但周围的模块无法工作的情况。这就好像使用乐高积木的不同颜色进行嵌入,但因为颜色不喜欢而使作品显得很俗气一样。

所以,在理解处理方式之后,让我们来阅读模块吧。

广告
将在 10 秒后关闭
bannerAds