2011-03-08 11 views
5

Sólo una pregunta teórica realmente.¿PHP está bajo reentrada de Apache?

dicen que mi sitio web consiste en un formulario que usa las funciones de correo de PHP para enviar correos electrónicos. Tengo 500 usuarios haciendo clic en enviar al mismo tiempo. Ahora se deben enviar 500 correos electrónicos en 500 sesiones diferentes desde PHP.

¿se hará al mismo tiempo? ¿Cuántos hilos están involucrados? cada uno enviará a bloquear a los demás y lo hará uno por uno?

Respuesta

4

Hay dos cosas que debe tener en cuenta.

La primera es cómo tiene configurado su servidor web. Si está utilizando Apache, hay algunos processing modules que se pueden elegir. El módulo de procesamiento más popular es prefork, en el que hay un único proceso principal y varios procesos hijos. Cada niño maneja una solicitud a la vez. Esto evita enhebrar por completo, porque no todos los módulos de Apache son seguros para subprocesos. También puede encontrar el módulo worker en producción. Utiliza una combinación de comportamiento de bifurcación y subprocesamiento para atender múltiples solicitudes por niño. Solo se puede usar cuando cada módulo de Apache y todas sus dependencias son seguros para la ejecución de subprocesos.

Lo segundo a tener en cuenta es PHP. Mientras que el lenguaje PHP central y algunas extensiones son seguras para hilos, muchas extensiones no son seguras para hilos. Por esta razón, cuando usa Apache y mod_php, el módulo de procesamiento prefork es su mejor opción. (PHP no tiene ningún concepto interno de hilos.)

tl; dr: Apache + PHP = una solicitud por hijo Apache. Por lo general, solo tendrá 20-30 hijos Apache, es decir, 20-30 posibles solicitudes simultáneas. Esto depende de la configuración.

1

En un servidor basado en Linux, los correos electrónicos se envían usando el comando local sendmail. Esto inmediatamente acepta el mensaje y regresa. El resto del trabajo lo realiza su MTA (de forma asíncrona), que se endurece y optimiza a lo largo de décadas para trabajos como este.

+0

muchas gracias. Entonces, tal vez el correo no fue un buen ejemplo. ¿Qué hay de otras acciones, por ejemplo, si el envío activa una solicitud de base de datos o un cálculo local del lado del servidor que demora 10 segundos? ¿Se hará algo al mismo tiempo usando X hilos de trabajo? – JasonGenX

+0

Apache simulará que se ejecutarán muchos procesos secundarios. Hay un número máximo de estos procesos definidos por cofiguración. Cada proceso hijo puede iniciar más subprocesos (generalmente se realiza al inicio y no se crean subprocesos en tiempo de ejecución). - Entonces, no debería ser un problema si el proceso se detiene por unos segundos, pero debe tenerlo en cuenta al realizar su configuración. – vbence

+0

Entonces, cuando escribo código PHP sin hilos, ¿puedo suponer que las acciones se realizarán simultáneamente según la configuración del Apache? ¿Cifro con "usuario único" en mente? – JasonGenX