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+mysql保存和输出文件
Oct 09 PHP
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
php 学习资料零碎东西
Dec 04 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
PHP常用正则表达式集锦
Aug 17 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
js function定义函数使用心得
2010/04/15 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
TensorFlow实现模型评估
2018/09/07 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
python多线程扫描端口(线程池)
2019/09/04 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
python编写实现抽奖器
2020/09/10 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
2014年会演讲稿范文
2014/01/06 职场文书
总经理司机职责
2014/02/02 职场文书
高三毕业感言
2015/07/30 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js