基于进程的模型,每个PHP解释器都被操作系统隔离到自己的进程中.这种模式在Unix下很常见.
下面有三个进程,每个进程先运行一个minit(),然后每个请求是一个RINIT().....RSHUTDOWN(),多个请求是串行的。
基于线程的模型,每个PHP解释器都使用线程库隔离成一个线程.该模型主要用于Windows操作系统,但也可以与大多数Unix一起使用.这需要PHP及其扩展在ZTS模式下构建.
配置编译PHP时加参数--enable-maintainer-zts则编译出的php为Zend线程安全(ZTS),否则不是线程安全(NTS)。
当使用pthread(POSIX threads)扩展时,或者当web服务器为Apache2 mpm-worker或IIS使用PHP作为模块时,请考虑使用ZTS。当使用FastCGI / FPM或Apache2 mpm-prefork时,您不需要ZTS,因为在PHP运行时使用的多进程处理。
NTS是运行PHP的首选方式。NTS还使您更容易编写和调试扩展。php -v
查看当前PHP的构建方式,它将在第一行输出中显示ZTS或NTS。在较旧的PHP版本中,如果这两个版本都不显示,那将是NTS。
参考:PHP代码执行过程