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快速统计某个数据库中每张表的数据量
Sep 04 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
php实现简单文件下载的方法
Jan 30 PHP
php自动给网址加上链接的方法
Jun 02 PHP
php生成验证码函数
Oct 20 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
微信自定义菜单的创建/查询/取消php示例代码
Aug 05 PHP
thinkphp 验证码 的使用小结
May 07 PHP
php+js实现裁剪任意形状图片
Oct 31 PHP
PHP count()函数讲解
Feb 03 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中的float类型使用说明
2010/07/27 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python3中的json模块使用详解
2018/05/05 Python
详解Python传入参数的几种方法
2019/05/16 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
文言文形式的学生求职信
2013/12/03 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
乡下人家教学反思
2014/02/01 职场文书
实用的简历自我评价
2014/03/06 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
航空学院求职信
2014/06/11 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
邹越演讲观后感
2015/06/15 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP