PHP自身是不支持线程的,可是它在安装的时候,涉及到一个线程安全的问题,Windows下提供了二种安装包,Linux下编译安装提供了–enable-maintainer-zts这个选项。php
不少人一看到“安全”,就觉得是好事,其实否则。
既然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.myhack58.com/Article/60/63/2015/60894.htm