¿Qué es Thread Safe y Non-Thread Safe en PHP? Aclarémoslo de una vez
\n\nSi alguna vez has instalado PHP en Windows o configurado un servidor web, seguro has visto las misteriosas siglas TS y NTS en los nombres de los instaladores. O has leído advertencias en la documentación: «Elija la versión thread-safe o non-thread-safe». Y de inmediato surge la pregunta: «¿Qué significa esto? ¿Y qué pasa si elijo la incorrecta?»
\n\nEste artículo es tu guía definitiva en el mundo de la seguridad de hilos en PHP. Vamos a entender las diferencias entre las compilaciones thread safe (TS) y non-thread safe (NTS), cuándo usar cada una y cómo evitar problemas de compatibilidad con extensiones. ¡Comencemos!
\n\nEn pocas palabras: ¿qué es la seguridad de hilos?
\n\nImagina que PHP es un chef en una cocina. Cada solicitud a tu sitio web es un nuevo pedido. En el modo non-thread safe, cada pedido lo prepara un chef diferente en su propia cocina. No se estorban porque cada uno tiene sus propios cuchillos, ollas e ingredientes. Sin memoria compartida, no hay conflictos.
\n\nEn el modo thread safe, tienes un solo chef, pero trabaja con varias manos (hilos). Todas las manos comparten la misma cocina, las mismas herramientas y la misma memoria. El truco está en no agarrar el mismo cuchillo al mismo tiempo. Para evitarlo, se necesitan bloqueos y sincronización: eso es precisamente la seguridad de hilos (thread safety).
\n\nEn términos simples: Thread Safe (TS) significa que PHP puede funcionar en un entorno multihilo, donde un solo proceso maneja varias solicitudes simultáneamente. Non-Thread Safe (NTS) significa que PHP opera en modo monohilo, donde cada solicitud se ejecuta en un proceso independiente.
\n\n¿Cuándo y por qué surgieron las versiones TS y NTS?
\n\nHistóricamente, PHP se desarrolló como un módulo para Apache (mod_php). Apache puede funcionar en dos modos: prefork (un proceso por solicitud) y worker (un proceso con múltiples hilos). Para prefork, la seguridad de hilos no es necesaria: cada solicitud está aislada. Pero para worker, es crítica.
\n\nMás tarde, con el auge de FastCGI (PHP-FPM) y Nginx, quedó claro que en estos escenarios no se usa la multitarea dentro de PHP. FastCGI lanza procesos independientes, y cada uno trabaja por su cuenta. ¿Para qué cargar entonces con el pesado código de bloqueos? Así nacieron las compilaciones non-thread safe, más ligeras.
\n\n¿Cómo saber qué versión de PHP tienes instalada?
\n\nLa forma más sencilla es ejecutar en la consola o en un script PHP:
\n\n<?php\nphpinfo();\n?>\n\nBusca la línea Thread Safety. Si dice enabled, tienes la versión TS. Si dice disabled, es NTS.
\n\nOtra forma es revisar la salida del comando php -i | findstr "Thread" (Windows) o php -i | grep Thread (Linux/macOS).
Diferencias visuales en los nombres de los instaladores
\n\nEn el sitio oficial windows.php.net verás nombres como estos:
\n\n- \n
- php-8.3.0-Win32-vs16-x64.zip — normalmente es NTS (pero revisa la descripción) \n
- php-8.3.0-Win32-vs16-x64-ts.zip — esta es la versión TS, claramente marcada con
-ts\n
En Linux, las compilaciones no suelen separarse: se usa un solo binario compilado con soporte de hilos (ZTS — Zend Thread Safety), pero la multitarea real solo se activa al usar Apache worker.
\n\nCasos prácticos: ¿cuándo elegir TS y cuándo NTS?
\n\nCaso 1: Apache + mod_php (MPM worker)
\n\nSi usas Apache con worker o event MPM (modos multihilo), necesitas estrictamente la versión TS de PHP. De lo contrario, tendrás errores fatales, caídas del servidor y pérdida de datos. Se vería algo así