Windows下的PHP安装文件线程安全和非线程安全的区别


Posted in PHP onApril 23, 2014

从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用 多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程 的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的 PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。而用线程安全版本的话顶多只是搞跨某个 线程,而不会影响到整个IIS的安全。

当然在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。为了兼顾IIS下PHP的效率和安全, 有人给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个 进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

附:德问相关问题摘录

下载PHP安装文件时,我看到有两种不同的二进制文件,像是非线程安全(Non Thread Safe)和线程安全(Thread Safe),比如该页面所列:http://windows.php.net/download/。这个是什么意思,之间有什么区别?

这个主要是针对web server 而言,在windows环境下,如果你使用的web server 是apchae 或者 iis 7以下版本,则应该选择线程安全的安装文件,而如果你使用Fast-cgi模式时,可以选择非线程安全,因为 web sever 本身能保证线程安全。
当然还有二进制文件编译时所使用的编译器:vc9 (vs系列) vc6(gcc)

如楼上所言,是针对web server的,部分web server在处理应用请求的时候是用多线程而非多进程的方式处理,线程方式因为涉及到共享寄存器和内存,所以很容易出错,这个时候程序就需要花一些额外的经历去处理寄存器中的数据一致性,即保证线程安全。
所以是否采用线程安全主要看你的web server所采用的PHP请求处理方式,如果是多线程处理,那么请选择线程安全的,否则选择非线程安全的,如楼上所说Fast-cgi方式可选择非线程安全的

PHP 相关文章推荐
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
destoon之一键登录设置
Jun 21 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
PHP框架性能测试报告
May 08 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
PHP使用非对称加密算法RSA
Apr 21 PHP
php自定义session示例分享
Apr 22 #PHP
php cli换行示例
Apr 22 #PHP
php使用百度天气接口示例
Apr 22 #PHP
phpmailer中文乱码问题的解决方法
Apr 22 #PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 #PHP
自己写了一个php检测文件编码的函数
Apr 21 #PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 #PHP
You might like
php版微信发红包接口用法示例
2016/09/23 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
javascript 写类方式之四
2009/07/05 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
pyside写ui界面入门示例
2014/01/22 Python
Python 文件读写操作实例详解
2014/03/12 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
EM算法的python实现的方法步骤
2018/01/02 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
delegate与普通函数的区别
2014/01/22 面试题
管理科学大学生求职信
2013/11/13 职场文书
建筑安全员岗位职责
2015/02/15 职场文书