PHP 中的 Thread Safety 与 None-Thread Safe 的区别 Thread Safety 简称 TS,即线程安全;一般在 IIS 以 ISAPI 方式加载的时候才选择 Thread Safety PHP 版本。 None-Thread Safe 简称 NTS,即非线程安全;一般以 fast cgi 方式运行的时候才选择 None-Thread Safe PHP 版本,具有更好的性能。 多进程、多线程 从 2000 年 10 月 20 日发布的第一个 Windows 版 PHP 3.0.17 开始的都是线程安全的版本;这是由于 Linux/Unix 系统都采用多进程工作方式,而 Windows 系统采用多线程工作方式。 若在 IIS 下以 CGI 方式运行 PHP 会非常慢,这是由于 CGI 模式是建立在多进程基础之上,而非多线程。一般会把 PHP 配置成以 ISAPI 的方式运行,ISAPI 是多线程方式,这样就快多了。但存在一个问题,很多常用 PHP 扩展是以 Linux/Unix 多进程思想开发的,这些扩展在 ISAPI 方式下运行时会出错搞垮 IIS。因此 IIS 下 CGI 模式才是 PHP 运行的最安全方式,但 CGI 模式对于每个 HTTP 请求需要重新加载和卸载整个 PHP 环境,资源消耗巨大。 CGI、FastCGI 为兼顾 IIS 下 PHP 的效率和安全,微软给出了 FastCGI 的解决方案。FastCGI 可让 PHP 的进程重复利用,而不是每一新请求都重开一进程。FastCGI 还允许几个进程同时执行。这样既解决了 CGI 进程模式资源消耗太大的问题,又利用上了 CGI 进程模式不存在线程安全问题的优势。 TS、NTS 因此,若使用 ISAPI 方式运行 PHP,就必须采用 Thread Safe (线程安全) 版本;而使用 FastCGI 模式运行 PHP 的话,就没必要检查线程安全,使用 None Thread Safe (NTS,非线程安全) 的版本能够更好的提高效率。 版权声明: 本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。 |