Зачем PHP асинхронность?
PHP — один из последних крупных языков, который до сих пор не имеет встроенной
поддержки конкурентного выполнения на уровне языка. Python получил asyncio, JavaScript изначально
построен на event loop, Go имеет goroutines, Kotlin — coroutines. PHP остаётся
в парадигме «один запрос — один процесс», несмотря на то что большинство
реальных приложений тратят основное время на ожидание I/O (IO Bound).
Проблема фрагментации
Сегодня асинхронность в PHP реализуется через расширения: Swoole, AMPHP, ReactPHP.
Каждое из них создаёт собственную экосистему с несовместимыми API,
собственными драйверами баз данных, HTTP-клиентами и серверами.
Это приводит к критическим проблемам:
- Дублирование кода — каждое расширение вынуждено переписывать драйверы
для
MySQL,PostgreSQL,Redisи других систем - Несовместимость — библиотека, написанная для
Swoole, не работает сAMPHP, и наоборот - Ограниченность — расширения не могут сделать стандартные функции
PHP(file_get_contents,fread,curl_exec) неблокирующими, потому что у них нет доступа к ядру - Барьер входа — разработчику нужно изучать отдельную экосистему вместо использования привычных инструментов
Решение: интеграция в ядро
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, Статистика конкурентности.
Практические сценарии
- Web-серверы — обработка множества запросов в одном процессе
(
FrankenPHP,RoadRunner) - API Gateway — параллельная агрегация данных из нескольких микросервисов
- Фоновые задачи — конкурентная обработка очередей
- Real-time — WebSocket-серверы, чат-боты, стриминг