Зачем PHP асинхронность?

PHP — один из последних крупных языков, который до сих пор не имеет встроенной поддержки конкурентного выполнения на уровне языка. Python получил asyncio, JavaScript изначально построен на event loop, Go имеет goroutines, Kotlin — coroutines. PHP остаётся в парадигме «один запрос — один процесс», несмотря на то что большинство реальных приложений тратят основное время на ожидание I/O (IO Bound).

Проблема фрагментации

Сегодня асинхронность в PHP реализуется через расширения: Swoole, AMPHP, ReactPHP. Каждое из них создаёт собственную экосистему с несовместимыми API, собственными драйверами баз данных, HTTP-клиентами и серверами.

Это приводит к критическим проблемам:

Решение: интеграция в ядро

TrueAsync предлагает другой подход — асинхронность на уровне ядра PHP. Это означает:

Прозрачность

Существующий синхронный код работает в корутинах без изменений. file_get_contents(), PDO::query(), curl_exec() — все эти функции автоматически становятся неблокирующими, когда выполняются внутри корутины.

// Этот код уже работает конкурентно!
spawn(function() {
    $data = file_get_contents('https://api.example.com/users');
    // корутина приостанавливается во время HTTP-запроса,
    // другие корутины продолжают работать
});

Отсутствие цветных функций

В отличие от Python (async def / await) и JavaScript (async / await), TrueAsync не требует маркировки функций как асинхронных. Любая функция может выполняться в корутине — нет разделения на «синхронный» и «асинхронный» мир.

Единый стандарт

Стандартный True Async ABI как часть Zend позволяет любому расширению поддержать неблокирующий I/O: MySQL, PostgreSQL, Redis, файловые операции, сокеты — всё через единый интерфейс. Больше не нужно дублировать драйверы для каждого async-фреймворка.

Обратная совместимость

Существующий код продолжает работать, но теперь весь код PHP асинхронный по-умолчанию. Везде.

PHP workload: почему это важно именно сейчас

Типичное PHP-приложение (Laravel, Symfony, WordPress) тратит 70–90% времени на ожидание I/O: запросы к БД, HTTP-вызовы к внешним API, чтение файлов. Всё это время CPU простаивает.

С корутинами это время используется эффективно:

Сценарий Без корутин С корутинами
3 запроса к БД по 20ms 60ms ~22ms
HTTP + БД + файл последовательно параллельно
10 API-вызовов 10 × latency ~1 × latency

Подробнее: IO-Bound vs CPU-Bound, Статистика конкурентности.

Практические сценарии

Так же смотрите: