Что такое Fiber в Ruby?

Корутины, сохранение состояния и обмен через resume/yield. Отличие конкурентного ожидания от параллельной работы CPU.

Короткий ответ

Что ответить на собеседовании

Fiber — легковесная корутина с собственным состоянием выполнения. Она может приостановиться через Fiber.yield и продолжить с того же места через resume. Переключение кооперативное: несколько fibers одного потока не выполняют Ruby-код одновременно на разных ядрах. Fiber Scheduler может организовать переключение на поддерживаемых операциях I/O.

Подробный разбор

Ответ с пояснениями

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

fiber = Fiber.new do
  received = Fiber.yield(1)
  puts received
  Fiber.yield(2)
  3
end

p fiber.resume          # 1
p fiber.resume("hello") # печатает hello, затем 2
p fiber.resume          # 3: блок завершился
p fiber.alive?          # false

Первый resume начинает выполнение блока. Аргумент yield возвращается вызывающему коду как результат resume; аргумент следующего resume становится результатом приостановленного yield. После завершения блока повторное возобновление вызывает FiberError. Fiber.

Планирование кооперативное. Fiber не является отдельным потоком ОС, и несколько fibers в одном потоке не дают CPU-параллелизм. Длительный вычислительный участок без передачи управления задержит остальные задачи этого потока.

При подключённом Fiber Scheduler поддерживаемые операции ожидания могут передавать управление планировщику, поэтому прикладному коду не всегда приходится писать yield вручную. Но сам по себе Fiber.new не превращает все блокирующие библиотеки в неблокирующие.

В сравнении с Thread отличается прежде всего управление выполнением. Нельзя обещать, что любой Ruby Thread использует отдельное ядро для Ruby-кода: это зависит от реализации и ограничений GVL. Fiber выбирают ради подходящей модели управления и ожидания, а не как универсальный способ ускорить вычисления.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку