PHP Academy · Урок

Fibers: кооперативная многозадачность

Приостанавливайте и возобновляйте выполнение PHP с помощью Fibers для асинхронных сценариев

Урок 4 из 413 шагов

«Fibers: кооперативная многозадачность» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Что такое файберы?

В PHP 8.1 появились файберы — лёгковесные сопрограммы, которые могут приостановить выполнение в определённой точке и возобновить его позже, обеспечивая кооперативную многозадачность.

Файберы и асинхронность

Файберы — это не параллельные потоки: PHP по-прежнему работает в одном потоке. Файберы позволяют одному контексту выполнения добровольно передавать управление другому, обеспечивая шаблоны, похожие на асинхронные.

Создание файбера

Создайте фибру, передав вызываемый объект её конструктору. Фибра не запускается, пока Вы не вызовете start().

<?php
$fiber = new Fiber(function (): void {
    echo "Fiber started\n";
    $value = Fiber::suspend("first suspension");
    echo "Resumed with: $value\n";
});

Запуск и приостановка

start() выполняет фибру до первого вызова Fiber::suspend(). Значение, переданное в suspend(), возвращается из start().

<?php
$suspended = $fiber->start(); // runs until suspend()
echo $suspended; // "first suspension"

Возобновление фибры

resume($value) продолжает выполнение фибры с места её приостановки. Значение, переданное в resume(), возвращается вызовом Fiber::suspend() внутри фибры.

<?php
$fiber->resume("hello from main");
// Inside fiber: $value = "hello from main"
// Prints: "Resumed with: hello from main"

Полный пример работы с фиброй

Полный жизненный цикл фибры: создание, запуск, приостановка, возобновление, завершение.

<?php
$fiber = new Fiber(function (): string {
    $x = Fiber::suspend("paused");
    return "Fiber done, received: $x";
});

$msg = $fiber->start();   // "paused"
$fiber->resume("hi!");
echo $fiber->getReturn(); // "Fiber done, received: hi!"

Методы проверки состояния фибры

Проверьте состояние фибры с помощью методов: isStarted(), isSuspended(), isRunning(), isTerminated().

<?php
var_dump($fiber->isTerminated()); // true after getReturn()

Обработка ошибок в фибрах

Выбросьте исключение внутри фибры с помощью $fiber->throw(new Exception(...)). Исключение возникнет в точке Fiber::suspend() внутри фибры.

Интеграция с циклом событий

Фибры предназначены для работы циклов событий (ReactPHP, Revolt), в которых обратные вызовы операций ввода-вывода приостанавливаются во время ожидания и возобновляются после поступления данных.

Фибры и генераторы

Генераторы (PHP 5.5+) также приостанавливаются с помощью yield, но главным образом предназначены для ленивой итерации. Фибры — более универсальный механизм сопрограмм с двунаправленной передачей значений и возвращаемыми значениями.

Практические варианты применения

Фибры используются для неблокирующих HTTP-клиентов в Revolt, асинхронных запросов к базам данных, планировщиков кооперативных задач и потоковой обработки данных без сложностей многопоточности.

Итоги

Фибры позволяют одному контексту выполнения PHP приостанавливаться и возобновляться, обеспечивая кооперативную конкурентность. Они лежат в основе современных асинхронных фреймворков PHP. Fiber::suspend() передаёт управление, а resume() восстанавливает его.

Быстрая проверка

Как передать значение в приостановленную фибру?

Можно начать бесплатно

Изучай PHP с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
49
Уроки
195

Часто задаваемые вопросы

Урок «Fibers: кооперативная многозадачность» бесплатный?

Да — полный текст урока «Fibers: кооперативная многозадачность» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Fibers: кооперативная многозадачность»?

Приостанавливайте и возобновляйте выполнение PHP с помощью Fibers для асинхронных сценариев Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Fibers: кооперативная многозадачность»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Выражение match и именованные аргументы
  2. Оператор nullsafe и объединённые типы
  3. Перечисления (перечислимые типы)
  4. Fibers: кооперативная многозадачность
← Назад к PHP Academy