2009-03-25 31 views
46
  • ¿Es PHP (a partir de 5.2) seguro para subprocesos en Linux/UNIX?
  • ¿Sería posible usarlo con Apache Worker-MPM o Event-MPM?

Los hechos I recogidos hasta ahora no son concluyentes: los binarios¿Es PHP seguro para subprocesos?

  • predeterminadas incluidas en la mayoría de las distribuciones tienen ZTS discapacitados, por lo que yo sepa, que tendría que volver a compilar ellos.
  • En teoría, Zend Engine (núcleo PHP) con ZTS habilitado es seguro para subprocesos.
  • Se dice que algunos módulos pueden no ser seguros para subprocesos, pero no he encontrado ninguna lista de módulos que son o no son.
  • PHP FAQ indica casi lo mismo que el anterior.

¿Cuál es su experiencia?

No es solo acerca de segmentation faults ("violaciones de acceso" en la nomenclatura de Windows). Hay mucho más para thread safety.

+1

Si bien este es un tema candente, es una muy buena pregunta. Algo es o no es seguro para hilos. "En algún lugar en el medio" es un buen tema para discutir aquí. –

+0

Consulte la advertencia oficial de PHP: "* [No se recomienda el uso de un MPM con subprocesos en producción con Apache 2] (http://web.archive.org/web/20160412170643/http://www.php.net/manual/ es/install.unix.apache2.php) * ". También relacionado: http://web.archive.org/web/20160412171006/https://docs.newrelic.com/docs/agents/php-agent/troubleshooting/threaded-apache-worker-mpms – Pacerier

Respuesta

20

Sé que gettext y set_locale no son seguros para la rosca. PHP no debe usarse con un MPM enhebrado.

PHP Isn't Thread-Safe Yet.
Running PHP not threaded.

+0

sí, he lee ese artículo antes. Pero no da muchos hechos. También segfaults (o "violación de acceso") realmente no tiene mucho que ver con la seguridad de subprocesos. – vartec

+2

Sí lo hacen. Si los valores predeterminados son como resultado de violaciones de acceso a la memoria debido a un acceso incorrecto a las variables compartidas, entonces ese es exactamente el problema que desea evitar. * No * solo se trata de segfaults/violaciones de acceso, pero si lo hace segfault, no se moleste en buscar más porque definitivamente no es seguro para subprocesos. –

+0

Sí.Estoy usando nginx con php-fpm porque gettext no es seguro para subprocesos: http://stackoverflow.com/questions/1646249/php-gettext-problems-like-non-thread-safe/6726570#6726570 – Stann

5

Una mejor pregunta podría ser: "¿La siguiente código PHP va a desencadenar violaciónes de acceso si se utiliza MPM?" O bien, "¿Ha experimentado algún comportamiento extraño atribuible a problemas de simultaneidad con las siguientes funciones?"

lo contrario, es la ruleta rusa. Si está utilizando alguna aplicación empaquetada, puede que funcione bien ahora pero que se rompa un mes a partir de ahora cuando salga una nueva versión de la aplicación.

que aconsejan el uso de MPM con PHP en general. Sin embargo, si tiene algún código pequeño para ejecutar, puede publicarlo, y podríamos decirle si va a golpear una trampa.

+2

realmente el código puede no ser seguro para subprocesos y nunca causa ninguna violación de segfault/acceso. – vartec

+0

@vartec, sí, edité mi respuesta. –

+1

@TimPost, no entiendo muy bien por qué dice que es "ruleta rusa". Si el código es seguro para subprocesos, será seguro usar ** independientemente ** de cuántos subprocesos concurrentes lo están llamando. Incluso si tienes mala suerte en la "ruleta rusa" (supongo que te refieres a la intercalación simultánea de los hilos en cada paso y en todos los lugares posibles), es seguro si el código es seguro para subprocesos y no obtendremos un segfault . – Pacerier

6

Consulte Where can I get libraries needed to compile some of the optional PHP extensions? para obtener una lista de extensiones seguras para subprocesos y no seguras (* marcadas no son seguras para subprocesos y otras son).

+0

Esta lista funciona para las extensiones, pero no enumera las características inseguras de subprocesos de ** non ** - extensiones. E.g ['setlocale'] (http://php.net/manual/en/function.setlocale.php#refsect1-function.setlocale-notes) como se menciona por userOIS arriba. – Pacerier

Cuestiones relacionadas