在PHP 开发和生产环境搭建过程中,需要安装PHP语言解析器。官方提供了2种类型的版本, 线程安全 (TS)版和非线程安全(NTS)版,有时后我们 开发环境 和实际生产的环境有所不同,因此也需要选择安装对应的PHP版本。
名词解释
- TS :Thread Safe 线程 安全, 多线程 访问时,采用了加锁机制,当一个线程访问该类的某个数据时进行数据加锁保护,其他线程不能同时进行访问该数据,直到该线程读取完毕,其他线程才可访问使用该数据,好处是不会出现数据不一致或者数据污染的情况,但耗费的时间要比 NTS 长。
- NTS :Non Thread Safe 非线程安全, 不提供数据访问保护,有可能出现多个线程先后或同时操作同一数据的情况,容易造成数据错乱(即脏数据),一般操作的执行时间要比 TS 短。
PHP主要运行方式
PHP的两种主要运行方式:ISAPI和FastCGI。
ISAPI
ISAPI(Internet Server Application Programming Interface),通常是指被http服务器所加载,以服务器的模块形式运行。如win下的 apache 、iis,而linux上php则以 Apache模块(常用方式)方式运行。
Fast CGI
FastCGI是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一个新进程。这种方式是与语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。
传统的CGI方案中,当一个请求向 web server 发送请求时,web server总会fork一个CGI解释器进程进行处理这个请求,进程处理完成之后将结果返回给web server,web server将结果返回并显示出来,进程结束,当用户再次请求同一个页面时,web server又会fork一个新进程进行请求处理,这样效率会比较低下(CGI被人诟病的主要原因。而采用FAST-CGI 解释器的话,当一个请求执行完毕后不会注销该进程,而是将改进程进入休眠期,当接收到新的请求时,重新启用改进程进行处理。FAST-CGI 较CGI 减少了进程的重复创建的资源占用。
PHP以FAST-CGI方式加载运行的时候选择TNS版,具有更好的性能。
选择
通常win下 PHP + Apache 组合,以 ISAPI 的方式运行,而linux下通常分为2种:
- Apache + PHP,PHP一般作为Apache的模块进行运行;
- Nginx + PHP ,以FastCGI的方式,即 php-fpm 的方式运行,该方式对高并发、高负载有良好的性能体现,因此很多网站采用该方式进行环境的搭建。
总结:
- 以 ISAPI 方式运行就用 TS 线程安全版;
- 以 FAST-CGI 或 PHP-FPM 方式运行就用NTS 非线程安全版;
- 通常Linux 下 Apache + PHP 选TS,Nginx + PHP 选TNS;