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压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
php银联网页支付实现方法
Mar 04 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
php实现json编码的方法
Jul 30 PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
Python实现购物系统(示例讲解)
2017/09/13 Python
django页面跳转问题及注意事项
2019/07/18 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
.NET常见笔试题集
2012/12/01 面试题
给妈妈洗脚活动方案
2014/08/16 职场文书
个人查摆剖析材料
2014/10/04 职场文书
投诉信范文
2015/07/02 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js