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 相关文章推荐
一个更简单的无限级分类菜单代码
Jan 16 PHP
PHP 在线翻译函数代码
May 07 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
thinkphp模板继承实例简述
Nov 26 PHP
PHP原生函数一定好吗?
Dec 08 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
CI框架数据库查询之join用法分析
May 18 PHP
PHP实现活动人选抽奖功能
Apr 19 PHP
php实现每日签到功能
Nov 29 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
Laravel实现ORM带条件搜索分页
Oct 24 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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
php5.2.0内存管理改进
2007/01/22 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
php实现encode64编码类实例
2015/03/24 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
关于VPN
2012/06/10 面试题
项目副经理岗位职责
2013/12/30 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
小学优秀班主任材料
2014/12/17 职场文书
销售员岗位职责
2015/02/10 职场文书
golang中的并发和并行
2021/05/08 Golang