开发者社区> 问答> 正文

关于PHP的线程安全模式(Thread Safety)

PHP自身是不支持线程的,但是它在安装的时候,涉及到一个线程安全的问题,Windows下提供了二种安装包,Linux下编译安装提供了–enable-maintainer-zts这个选项。

很多人一看到“安全”,就以为是好事,其实不然。

既然PHP没有线程,那么这个线程安全指的是什么呢?这和它的运行方式有关。
这里仅对Linux系统下流行的两种PHP运行方式(LNMP和LNAMP)来讲一下。

如果是LNMP环境,也就是说PHP以php-fpm方式运行,那么就不涉及到线程安全这个问题了,因为php-fpm是以多进程的方式来运行的。
如果是以LNAMP或者LAMP方式运行(mod_php),那么应该先了解下Apache的MPM,简单点说,Apache支持以多线程的方式运行(Worker),也支持以多进程的方式运行(Prefork)。一般来讲,Linux下的Apache绝大多数都是运行在Prefork模式下,这是出于稳定性的考虑。

所以总结下,LNMP下不需线程安全,Apache下为了稳定性的考虑,建议以多进程的方式进行(Prefork),这样也是不需要线程安全的。

最后一点,PHP安装为线程安全,会比非线程安全多占用一些CPU,并且可能会增加bug或者不稳定的问题,这才是重点,不然PHP就没必要设置这个选项了。

原文地址: http://www.yundaiwei.com/post/394.html

展开
收起
云代维 2015-03-06 11:45:50 7513 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载