首先,Thread Safe 是指程序在运行时需对线程(thread)进行安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源。None Thread Safe 则指程序在运行时不对线程进行安全检查。
再来看 PHP 的两种服务模式:ISAPI 和 FastCGI 。ISAPI 服务模式是以 DLL 动态库的形式被调用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率。而 FastCGI 执行方式则是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查反而可以提高执行效率。
所以,简单的概括就是当 PHP 以 ISAPI 模式运行服务时,选择 Thread Safe 版本;以 FastCGI 模式运行服务时,选择 Non Thread Safe 版本。可以通过 phpinfo() 函数页面里的 Thread Safety 项查询当前 PHP 版本是不是线程安全的。
注:ISAPI 和 FastCGI 无需在 PHP 中设置,其取决于Web Server(Apache、IIS、Nginx)以哪种模式与 PHP 合作完成服务。