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关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题

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

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

/*  * PHP 版本Thread Safe 与 None Thread Safe的区别  * 从2000年发布的第一个Windows PHP版本PHP3.0.17开始都是线程安全的版本,这是由...
  • daiyutage
  • daiyutage
  • 2015年10月09日 10:08
  • 3178

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

先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新...
  • Rain_Rock
  • Rain_Rock
  • 2017年06月16日 17:12
  • 1436

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

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

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

转载自:non-thread-safe和thread-safe的区别 PHP5 non-thread-safe和thread-safe的区别 从PHP5.2.10版本开始(现在有PHP5.2.10...
  • Jaystrong
  • Jaystrong
  • 2018年01月09日 12:46
  • 57

php non-thread-safe 和 thread-safe区别

从PHP5.2.10版本开始,有None-Thread Safe与Thread Safe两种版本的可供选择 None-Thread Safe  : 非线程安全,在执行时不进行线程(thread)...
  • lonphy23t
  • lonphy23t
  • 2013年02月27日 11:13
  • 667

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

转载:http://www.cnblogs.com/whoknows/articles/2425841.html 最近发现很多PHP程序员对PHP版本知识了解不是很清楚,自己也看了不...
  • zhangxinrun
  • zhangxinrun
  • 2013年11月07日 14:21
  • 8685

None-thread-safe or thread-safe

Apache 一般选 none-thread-safe,IIS选后者(FAST-CGI),我就不解释了,信哥就没错。 TS指Thread Safety,即线程安全,一般在IIS以ISAPI方式加...
  • ccfxue
  • ccfxue
  • 2017年03月29日 13:57
  • 192

为了使用phpthreads,在Ubuntu上重新编译php源码和phpthread源码

傻瓜式apt-get 安装的php不支持phpthreads,搜索好久得到的答案是:使用源码编译安装。 下面开始: 1.下载php源码和phpthread源码,然后解压. 使用的php版本是5.6...
  • tingyuanss
  • tingyuanss
  • 2016年01月19日 16:58
  • 1784

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

从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择...
  • qq_31643343
  • qq_31643343
  • 2015年10月09日 10:38
  • 2800
收藏助手
不良信息举报
您举报文章:PHP5 non-thread-safe和thread-safe的区别
举报原因:
原因补充:

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