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.MVC的模板标签系统(二)
Sep 05 PHP
php中的实现trim函数代码
Mar 19 PHP
ezSQL PHP数据库操作类库
May 16 PHP
PHP代码审核的详细介绍
Jun 13 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
cakephp常见知识点汇总
Feb 24 PHP
php获取数据库结果集方法(推荐)
Jun 01 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 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
一次编写,随处运行
2006/10/09 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
C语言变量的命名规则都有哪些
2013/12/27 面试题
计算机求职自荐信范文
2014/04/19 职场文书
校运动会广播稿300字
2014/10/07 职场文书
信访维稳承诺书
2015/05/04 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书