PHP5 non-thread-safe和thread-safe的区别

转载 2015年10月09日 10:38:25

从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?

先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;
Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源。

一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

      为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。


FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(搭配IIS)执行 PHP ,都建议下载执行 non-thread safe 的 PHP (PHP 的二进位档有两种包装方式:msi 、zip ,请下载 zip 套件)。
而线程安全检查正是为ISAPI方式的PHP准备的,ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率。因为有许多php模块都不是线程安全的,以ISAPI来执行PHP,所以需要使用Thread Safe的PHP(搭配apache)。

如果你还搞不清楚,那么只需知道你是php+apache还是php+iis组合
non-thread-safe 非 线程安全与IIS搭配环境
thread-safe  线程安全 与apache搭配环境

PHP是用C语言开发的所以依赖VC库运行

Visual C++ 2003 运行库(VC7)
Visual C++ 2005 运行库(VC8)
Visual C++ 2008 运行库(VC9)
Visual C++ 2010 运行库(VC10)
Visual C++ 2012 运行库(VC11)
Visual C++ 2013 运行库(VC12)
只有安装了相应的运行库才能运行PHP,,如php5.5要求VC11的安装
php还有VC6 VC9版本区分,VC6和VC9一个支持apache一个支持IIS,VC9用在apache上也没问题,如果你用iis就必须用vc9的,如果你用apache vc6和vc9都可以用。




相关文章推荐

PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别

转载:http://www.cnblogs.com/whoknows/articles/2425841.html 最近发现很多PHP程序员对PHP版本知识了解不是很清楚,自己也看了不...

PHP Thread Safe 与 None Thread Safe 版本的区别

/*  * PHP 版本Thread Safe 与 None Thread Safe的区别  * 从2000年发布的第一个Windows PHP版本PHP3.0.17开始都是线程安全的版本,这是由...

PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题

这里是我在搭建php环境时收集的资料供大家参考: 现在PHP官网上下载PHP安装包都有VC11或VC9的字样,这是什么含义,我们应该下载哪种安装包更好呢?其实PHP官网给出了答案: VC6...
  • lrcoop
  • lrcoop
  • 2015年05月04日 10:17
  • 20592

PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题

从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择...
  • flitrue
  • flitrue
  • 2016年03月16日 21:34
  • 1339

Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分

Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非 线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

php 版本选择、线程安全(Thread Safe)和非线程安全(Non Thread Safe)

先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP5 non-thread-safe和thread-safe的区别
举报原因:
原因补充:

(最多只允许输入30个字)