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判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
php生成zip压缩文件的方法详解
Jun 09 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
php遍历解析xml字符串的方法
May 05 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
php写app接口并返回json数据的实例(分享)
May 20 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 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防CC攻击实现代码
2011/12/29 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
js命名空间写法示例
2015/12/18 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
jQuery事件用法详解
2016/10/06 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
python中随机函数random用法实例
2015/04/30 Python
详解Python的Django框架中的模版相关知识
2015/07/15 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python进阶之自定义可迭代的类
2019/08/20 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
自我鉴定范文200字
2013/10/02 职场文书
运动会解说词100字
2014/01/31 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
招标保密承诺书
2015/01/20 职场文书
2015年预算员工作总结
2015/05/14 职场文书
大学新生入学感想
2015/08/07 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
MySql数据库触发器使用教程
2022/06/01 MySQL
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers