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 相关文章推荐
PHP6 mysql连接方式说明
Feb 09 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
PHP无限分类(树形类)
Sep 28 PHP
php检测useragent版本示例
Mar 24 PHP
PHP中的替代语法简介
Aug 22 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
学习PHP的数组总结【经验】
May 05 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 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
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
javascript奇异的arguments分析
2010/10/20 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
详解a++和++a的区别
2017/08/30 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
python批量生成条形码的示例
2020/10/10 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
几个Shell Script面试题
2012/08/31 面试题
材料成型专业个人求职信范文
2013/09/25 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
班主任开场白
2015/06/01 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python