TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #6569 1.86K
🧵 PHP Fibers вместо ада сериализации

В Manychat жили на curl_multi_exec для псевдоконкурентных запросов. Работало, пока AI-фичи не размножились. Каждый внешний вызов означал: сериализуй состояние бизнес-логики, отдай в очередь, дождись, десериализуй, восстанови контекст. Ревью кода превращались в квест — логика рвалась на куски вокруг async-границ.

Добил их апгрейд Ubuntu: OpenSSL 3.0 со своими мьютексами на обходе хранилища сертификатов выкатил +10% к CPU на ровном месте. Виноваты синхронные вызовы Meta API, т.к. каждый payload открывал новый TCP.

Решение — затащить Fibers поверх существующего event loop на Guzzle. Файбер приостанавливается на внешнем HTTP, воркер берёт следующий payload, при готовности ответа возобновляет нужный файбер с того же места:
$fiber = new Fiber(function() {
echo "Suspending\n";
$last = Fiber::suspend(16);
echo "Resuming with {$last}\n";
});

$last = $fiber->start(); // 16
$fiber->resume(42); // 42


🚀 Что получили

Переиспользование одного HTTP/2 соединения на воркер (прощай, рукопожатия);
Асинхронный sleep вместо блокировки всего процесса при ретраях;
Линейный код без знания разработчиком про файбер под капотом.

💣 Расплата → радиус поражения. Раньше фатал клал воркер с одним payload. Теперь в полёте висят пятеро файберов, и OOM убивает всех. Catchable-ошибки переписали так, чтобы валить только свой файбер.

Если бы начинали с нуля, взяли бы Revolt или AMPHP. Но кастомный луп уже был, Fibers легли сверху.

🔗 Читать оригинал

🐸 Библиотека пхпшника
  • ❤ 4
  • 👍 2
  • 🔥 1
More from @phpproglib
  1. Sep 21, 2026⚡️ PHP 8.6 выйдет 19 ноября 2026 года. Сейчас версия находится в beta. Самые заметные изме…
  2. Sep 20, 2026❓ Какие существуют проблемы в многопоточной среде? Основные проблемы многопоточности: 1️⃣…
  3. Sep 19, 2026🌞 В Symfony 8.2 появилось 29 новых Bundle — теперь компоненты вроде Mailer, Messenger и C…
  4. Sep 19, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
  5. Sep 18, 2026🐸 Библиотека пхпшника
  6. Sep 17, 2026🛠 `str_contains` и семья: проверяем строки без ловушек Проверка через strpos годами путал…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →