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数组应用之比较两个时间的相减排序
Aug 18 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 PHP
PHP实现ftp上传文件示例
Aug 21 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
PHP大文件分块上传功能实例详解
Jul 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
一个用php3编写的简单计数器
2006/10/09 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
PHP静态文件生成类实例
2014/11/29 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
使用async await 封装 axios的方法
2018/07/09 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
跟老齐学Python之for循环语句
2014/10/02 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python基于递归解决背包问题详解
2019/07/03 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
市场营销方案范文
2014/03/11 职场文书
二年级评语大全
2014/04/23 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
董事长致辞
2015/07/29 职场文书