Выбор ответа Senior PHP 8.x: enum, readonly, match обновлено

Файберы против генераторов

Вопрос

Чем Fiber принципиально отличается от генератора?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Файбер приостанавливается из любой глубины вызовов. У файбера свой стек вызовов, поэтому приостановиться может любая функция внутри него, и вызывающий код не обязан быть генератором.

Варианты ответа

  1. Файбер выполняется в отдельном потоке ОС параллельно
  2. Генератор нельзя возобновить, а файбер можно
  3. Файберы работают только в Swoole и требуют расширения
  4. Файбер приостанавливается из любой глубины вызововправильный ответ

Разбор

У файбера свой стек вызовов, поэтому приостановиться может любая функция внутри него, и вызывающий код не обязан быть генератором. Это позволяет асинхронным библиотекам (Revolt, AMPHP) писать синхронно выглядящий код. Параллельности нет: всё в одном потоке, переключение кооперативное. Генераторы тоже возобновляются (next, send). Файберы встроены в ядро PHP 8.1 без расширений.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме