博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP Non-Thread-Safe和Thread-Safe的区别
阅读量:2288 次
发布时间:2019-05-09

本文共 1420 字,大约阅读时间需要 4 分钟。

        从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都可以用。

以上是转载自的内容

总结一下:

在Windows下使用IIS和PHP,Fast CGI是单一线程进行操作的,就只有一个线程,所以不需要进行线程检查,为了减少系统资源消耗,因此要选择non-threead-safe

因为有很多PHP扩展不是线程安全的,如果使用ISAPI以多线程的方式,所以需要线程检查,使用thread-safe

你可能感兴趣的文章
正则表达式使用详解(一)
查看>>
WIN下,Web.py+apache2.2(mod_wsgi)保证session可用
查看>>
前端开发框架bootstrap
查看>>
The Best BootStrap Resources
查看>>
监听的IP本地不存在 负载均衡启动报错
查看>>
缓冲(Bufer)和缓存(cache)区别
查看>>
tmpfs文件系统
查看>>
浏览器缓存
查看>>
favicon.ico引起的大量404
查看>>
Nginx缓存服务
查看>>
NFS一些问题
查看>>
利用TCP Wrappers构建sshd访问控制列表
查看>>
DenyHosts
查看>>
Maven构建环境安装
查看>>
SVN检出报错
查看>>
SVN同步版本库
查看>>
网络流量分析工具TCPDUMP
查看>>
系统弱密码检查John
查看>>
用户特权管理
查看>>
Linux软件包管理
查看>>