Vi diferentes binarios para PHP, como no-thread o thread safe?
¿Qué significa esto?
¿Cuál es la diferencia entre estos paquetes?
Vi diferentes binarios para PHP, como no-thread o thread safe?
¿Qué significa esto?
¿Cuál es la diferencia entre estos paquetes?
Respuestas:
Antecedentes necesarios sobre enfoques de concurrencia:
Diferentes servidores web implementan diferentes técnicas para manejar solicitudes HTTP entrantes en paralelo. Una técnica bastante popular es utilizar hilos, es decir, el servidor web creará / dedicará un solo hilo para cada solicitud entrante. El servidor web Apache HTTP admite múltiples modelos para manejar solicitudes, uno de los cuales (llamado el MPM de trabajo) utiliza subprocesos. Pero admite otro modelo de concurrencia llamado prefork MPM que utiliza procesos, es decir, el servidor web creará / dedicará un solo proceso para cada solicitud.
También hay otros modelos de simultaneidad completamente diferentes (utilizando sockets asíncronos y E / S), así como otros que mezclan dos o incluso tres modelos. Para responder a esta pregunta, solo nos interesan los dos modelos anteriores y tomar el servidor Apache HTTP como ejemplo.
Antecedentes necesarios sobre cómo PHP "se integra" con los servidores web:
PHP en sí no responde a las solicitudes HTTP reales: este es el trabajo del servidor web. Entonces configuramos el servidor web para reenviar solicitudes a PHP para su procesamiento, luego recibimos el resultado y lo enviamos de vuelta al usuario. Hay varias formas de encadenar el servidor web con PHP. Para Apache HTTP Server, el más popular es "mod_php". Este módulo es en realidad PHP, pero se compiló como un módulo para el servidor web, por lo que se carga directamente dentro de él.
Hay otros métodos para encadenar PHP con Apache y otros servidores web, pero mod_php es el más popular y también servirá para responder a su pregunta.
Es posible que no haya necesitado comprender estos detalles antes, porque las empresas de hosting y las distribuciones de GNU / Linux vienen con todo preparado para nosotros.
Ahora, a tu pregunta!
Dado que con mod_php, PHP se carga directamente en Apache, si Apache manejará la concurrencia usando su Worker MPM (es decir, usando subprocesos), entonces PHP debe poder operar dentro de este mismo entorno de subprocesos múltiples, lo que significa que PHP tiene que ¡Sea seguro para poder jugar correctamente con Apache!
En este punto, debería estar pensando "OK, así que si estoy usando un servidor web multiproceso y voy a incrustar PHP directamente en él, entonces debo usar la versión de PHP segura para subprocesos". Y este sería un pensamiento correcto. Sin embargo, como sucede, la seguridad de subprocesos de PHP está muy disputada . Es un terreno de uso-si-realmente-realmente-sabes-lo-que-estás haciendo.
Notas finales
En caso de que se lo pregunte, mi consejo personal sería no usar PHP en un entorno de subprocesos múltiples si tiene la opción.
Hablando solo de entornos basados en Unix, diría que afortunadamente, solo tiene que pensar en esto si va a usar PHP con el servidor web Apache, en cuyo caso le recomendamos que use el MPM prefork de Apache (que no usa subprocesos y, por lo tanto, la seguridad de subprocesos de PHP no importa) y todas las distribuciones de GNU / Linux que conozco tomarán esa decisión por usted cuando instale Apache + PHP a través de su sistema de paquetes, sin siquiera preguntarle para elegir Si va a utilizar otros servidores web como nginx o lighttpd , no tendrá la opción de incrustar PHP en ellos de todos modos. Estará viendo el uso de FastCGI o algo igual que funciona en un modelo diferente donde PHP está totalmente fueradel servidor web con múltiples procesos PHP utilizados para responder solicitudes a través de, por ejemplo, FastCGI. Para tales casos, la seguridad del hilo tampoco importa. Para ver qué versión está usando su sitio web, coloque un archivo que contenga
<?php phpinfo(); ?>
en su sitio y busque laServer API
entrada. Esto podría decir algo comoCGI/FastCGI
oApache 2.0 Handler
.Si también mira la versión de línea de comandos de PHP, la seguridad de los hilos no importa.
Finalmente, si la seguridad de subprocesos no importa, entonces, ¿qué versión debe usar: la segura para subprocesos o la no segura para subprocesos? Francamente, ¡no tengo una respuesta científica! Pero supongo que la versión no segura para subprocesos es más rápida y / o menos defectuosa, ¡o de lo contrario habrían ofrecido la versión segura para subprocesos y no se habrían molestado en darnos la opción!
fuente
Para mí, siempre elijo una versión no segura para subprocesos porque siempre uso nginx o ejecuto PHP desde la línea de comandos.
La versión no segura para subprocesos debe usarse si instala PHP como un binario CGI, interfaz de línea de comando u otro entorno donde solo se usa un solo subproceso.
Se debe usar una versión segura para subprocesos si instala PHP como un módulo de Apache en un MPM de trabajo (modelo de multiprocesamiento) u otro entorno donde varios subprocesos de PHP se ejecutan simultáneamente.
fuente
Se utiliza el prefork Apache MPM con modphp porque es fácil de configurar / instalar. En cuanto al rendimiento, es bastante ineficiente. Mi forma preferida de hacer la pila, FastCGI / PHP-FPM. De esa manera, puede usar el MPM Worker mucho más rápido. Todo el PHP permanece sin subprocesos, pero Apache sirve con subprocesos (como debería).
Básicamente, de abajo hacia arriba
Linux
Apache + MPM Worker + ModFastCGI (NO FCGI) | (o) | Cherokee | (o) | Nginx
PHP-FPM + APC
ModFCGI no admite correctamente PHP-FPM ni ninguna aplicación externa FastCGI. Solo admite scripts FastCGI administrados sin procesos. PHP-FPM es el administrador de procesos PHP FastCGI.
fuente
Según la documentación de PHP ,
¿Qué significa la seguridad de subprocesos al descargar PHP?
Las siguientes bibliotecas no son seguras para subprocesos. No se recomiendan para su uso en un entorno de subprocesos múltiples.
fuente