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 相关文章推荐
discuz Passport 通行证 整合笔记
Jun 30 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
php实现登陆模块功能示例
Oct 20 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
PHP7匿名类的用法示例
Apr 05 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 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实用性框形天线
2021/03/02 无线电
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
起点页面传值js,有空研究学习下
2010/01/25 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
vue中的模态对话框组件实现过程
2018/05/01 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
python进程管理工具supervisor使用实例
2014/09/17 Python
python操作excel的方法
2018/08/16 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
如何利用cmp命令比较文件
2016/04/11 面试题
个人三严三实对照检查材料
2014/09/25 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
企业培训简报范文
2015/07/20 职场文书
golang语言指针操作
2022/04/14 Golang