"The most dangerous phrase in the language is 'We've always done it this way.'"

— Grace Hopper

¿Por qué PHP necesita asincronía?

PHP es uno de los últimos grandes lenguajes que aún carece de soporte integrado para la ejecución concurrente a nivel de lenguaje. Python tiene asyncio, JavaScript está nativamente construido sobre un event loop, Go tiene goroutines, Kotlin tiene coroutines. PHP permanece en el paradigma «una petición — un proceso», a pesar de que la mayoría de las aplicaciones reales pasan la mayor parte del tiempo esperando I/O (IO Bound).

El problema de la fragmentación

Hoy en día, la asincronía en PHP se implementa mediante extensiones: Swoole, AMPHP, ReactPHP. Cada una crea su propio ecosistema con APIs incompatibles, sus propios controladores de bases de datos, clientes HTTP y servidores.

Esto genera problemas críticos:

  • Duplicación de código — cada extensión se ve obligada a reescribir controladores para MySQL, PostgreSQL, Redis y otros sistemas
  • Incompatibilidad — una biblioteca escrita para Swoole no funciona con AMPHP, y viceversa
  • Limitaciones — las extensiones no pueden hacer que las funciones estándar de PHP (file_get_contents, fread, curl_exec) sean no bloqueantes, porque no tienen acceso al núcleo
  • Barrera de entrada — los desarrolladores necesitan aprender un ecosistema separado en lugar de usar herramientas familiares

La solución: integración en el núcleo

TrueAsync propone un enfoque diferente — asincronía a nivel del núcleo de PHP. Esto significa:

Transparencia

El código síncrono existente funciona en corrutinas sin cambios. file_get_contents(), PDO::query(), curl_exec() — todas estas funciones se vuelven automáticamente no bloqueantes cuando se ejecutan dentro de una corrutina.

php
// ¡Este código ya se ejecuta de forma concurrente!
spawn(function() {
    $data = file_get_contents('https://api.example.com/users');
    // la corrutina se suspende durante la petición HTTP,
    // otras corrutinas continúan ejecutándose
});

Sin funciones coloreadas

A diferencia de Python (async def / await) y JavaScript (async / await), TrueAsync no requiere marcar las funciones como asíncronas. Cualquier función puede ejecutarse en una corrutina — no hay separación entre un mundo «síncrono» y «asíncrono».

Un estándar unificado

El True Async ABI estándar como parte de Zend permite a cualquier extensión soportar I/O no bloqueante: MySQL, PostgreSQL, Redis, operaciones de archivos, sockets — todo a través de una única interfaz. Ya no es necesario duplicar controladores para cada framework asíncrono.

Compatibilidad con versiones anteriores

El código existente sigue funcionando, pero ahora todo el código PHP es asíncrono por defecto. En todas partes.

PHP workload: por qué esto es importante ahora

Una aplicación PHP típica (Laravel, Symfony, WordPress) pasa 70–90% del tiempo esperando I/O: consultas a la BD, llamadas HTTP a APIs externas, lectura de archivos. Todo ese tiempo, la CPU permanece inactiva.

Con corrutinas, este tiempo se utiliza eficientemente:

EscenarioSin corrutinasCon corrutinas
3 consultas BD de 20ms cada una60ms~22ms
HTTP + BD + archivosecuencialparalelo
10 llamadas a API10 × latencia~1 × latencia

Más información: IO-Bound vs CPU-Bound, Estadísticas de concurrencia.

Escenarios prácticos

  • Servidores web — procesamiento de múltiples peticiones en un solo proceso (FrankenPHP, RoadRunner)
  • API Gateway — agregación paralela de datos desde múltiples microservicios
  • Tareas en segundo plano — procesamiento concurrente de colas
  • Tiempo real — servidores WebSocket, chatbots, streaming

Ver también: