Выбор ответа Senior PHP 8.x: enum, readonly, match обновлено
Файберы против генераторов
Вопрос
Чем Fiber принципиально отличается от генератора?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Файбер приостанавливается из любой глубины вызовов. У файбера свой стек вызовов, поэтому приостановиться может любая функция внутри него, и вызывающий код не обязан быть генератором.
Варианты ответа
- Файбер выполняется в отдельном потоке ОС параллельно
- Генератор нельзя возобновить, а файбер можно
- Файберы работают только в Swoole и требуют расширения
- Файбер приостанавливается из любой глубины вызововправильный ответ
Разбор
У файбера свой стек вызовов, поэтому приостановиться может любая функция внутри него, и вызывающий код не обязан быть генератором. Это позволяет асинхронным библиотекам (Revolt, AMPHP) писать синхронно выглядящий код. Параллельности нет: всё в одном потоке, переключение кооперативное. Генераторы тоже возобновляются (next, send). Файберы встроены в ядро PHP 8.1 без расширений.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.