关于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.myhack58.com/Article/60/63/2015/60894.htm

时间: 2024-10-16 01:35:16

关于PHP的线程安全模式(Thread Safety)【转】的相关文章

可重入(Reentrancy)VS线程安全(Thread safety)

在Wiki上,可重入的定义如下(详细链接) In computing, a computer program or subroutine is called reentrant if it can be interrupted in the middle of its execution and then safely called again ("re-entered") before its previous invocations complete execution. The

线程(Thread)、线程池(ThreadPool)技术

线程:是Windows任务调度的最小单位.线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数,在一个应用程序中,常常需要使用多个线程来处理不同的事情,这样可以提高程序的运行效率,也不会使主界面出现无响应的情况.在这里主要介绍线程(Thread).线程池(ThreadPool)两种不同创建线程的区别 在通常的情况下,当我们需要开启一个新的线程时,我们直接通过Thread(继承自 System.Threading;)去创建

开启线程的Thread与Runnable

1.线程介绍 进程(process)是指在系统中正在运行的一个应用程序,是系统资源分配的基本单位,在内存中有其完备的数据空间和代码空间,拥有完整的虚拟空间地址.一个进程所拥有的数据和变量只属于它自己. 线程(thread)是进程内相对独立的可执行单元,所以也被称为轻量进程(lightweight processes):是操作系统进行任务调度的基本单元.它与父进程的其它线程共享该进程所拥有的全部代码空间和全局变量,但拥有独立的堆栈(即局部变量对于线程来说是私有的). 当一个程序开始运行时,它就是一

线程(Thread,ThreadPool)、Task、Parallel

线程(Thread.ThreadPool) 线程的定义我想大家都有所了解,这里我就不再复述了.我这里主要介绍.NET Framework中的线程(Thread.ThreadPool). .NET Framework中的线程分为两类:1.前台线程:2.后台线程. 1.前台线程 class Program { static void Main(string[] args) { Console.WriteLine("=====Thread====="); TestThread(); Cons

Java Concurrency In Practice -Chapter 2 Thread Safety

Writing thread-safe code is managing access to state and in particular to shared, mutable state. Object's state is its data, stored in state variables such as instance or static fields. Whether an object needs to be thread-safe depends on whether it

Effective Java 70 Document thread safety

Principle The presence of the synchronized modifier in a method declaration is an implementation detail, not a part of its exported API. To enable safe concurrent use, a class must clearly document what level of thread safety it supports. Immutable ?

JAVA - 守护线程(Daemon Thread)

转载自:http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html 在Java中有两类线程:用户线程 (User Thread).守护线程 (Daemon Thread). 所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分.因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程.反过来说,只要任何非守护线

7种创建线程方式,你知道几种?线程系列Thread(一)

前言 最近特别忙,博客就此荒芜,博主秉着哪里不熟悉就开始学习哪里的精神一直在分享着,有着扎实的基础才能写出茁壮的代码,有可能实现的逻辑有多种,但是心中必须有要有底哪个更适合,用着更好,否则则说明我们对这方面还比较薄弱,这个时候就得好好补补了,这样才能加快提升自身能力的步伐,接下来的时间会着重讲解线程方面的知识.强势分割线. 话题乱入,一到跳槽季节想必我们很多人就开始刷面试题,这种情况下大部分都能解决问题,但是这样的结果则是导致有可能企业招到并非合适的人,当然作为面试官的那些人们也懒得再去自己出一

获取当前线程状态--Thread类

String msgToPrint = Thread.currentThread().getStackTrace()[3] .getMethodName(); 就是调用时的方法名. 其中使用的Thread类的第一个方法: public static Thread currentThread() 返回当前线程对象. 实例代码: package com.loaderman.getthreadstatusdemo; import android.support.v7.app.AppCompatActi