Нет, Generator - это совершенно другое. Фактически это функция, тело которой может быть поставлено на паузу. Но она не начинает выполняться внезапно сама по себе - а только когда объект генератора получает команду next(); и выполняется, пока не достигнет конца или yield, после чего выполнение возвращается на ту строчку, которая вызвала next(). Также генераторы можно использовать в циклах, для чего они изначально и предназначались - отсюда такое название. Представляю, как бы генератор "хорошо" работал поставщиком цикла, если бы выполнялся параллельно и независимо от процесса, в котором проводится цикл!
Вот пример, как генераторы трудятся у меня на основном проекте (в php):
protected function auto_mode()
{
if ($this->is_cacheable()) yield new TemplateMode_cache($this);
yield new \Pokeliga\Task\Need_call([$this, 'load_template_data']);
if ($this->is_plain()) yield new TemplateMode_plain($this);
elseif ($this->is_bakeable()) yield new TemplateMode_bake($this);
else yield false;
}
Эта функция определяет, в каком режиме будет обрабатываться шаблон (частичка веб-страницы). Сначала генератор проверяет, знаем ли мы заведомо, что шаблон кэшируемый, и если да - отправляет "наверх" этот результат. Среда (старший по стэку код) опознаёт возвращаемое как результат и больше не спрашивает.
Но если шаблон не кэшируемый, то нужны дополнительные сведения, и генератор возвращает специальный объект, который результатом быть не может и, следовательно, является зависимостью. Среда смотрит на это, выполняет зависимость когда ей удобно и возвращает управление генератору только тогда, когда его нужда разрешена. Значит, что после строчки yield new... выполнение ставится на паузу, а потом продолжается, когда генератору говорят "продолжи!", со всем прежним контекстом. yield можно даже использовать как точку получения данных от среды (старшего кода), но здесь этого просто не требуется.
Без генератора это пришлось бы записывать как "ад колбэков" или, в моём случае, как объекты, где каждое место для паузы должно обеспечиваться кучей кода и складывания контекста в переменные объекта... Как и было, пока я не догадалась использовать генераторы для этой цели.
Также я очень рада за возможность параллельных вычислений в Руби и игровых средах в принципе, но не похоже, что Fiber из этой оперы, потому что они описывается примерно теми же словами, как генератор, и ничего не говорит об изоляции переменных.