В общем, если тебе больше нравится такое описание, то корутины это как будто много goto. Твоя функция сделала часть работы и делает goto наружу (yield), в то место где её вызвали. Оттуда её могут вызвать ещё раз, переместившись в точку последнего goto из функции. Просто так, куча goto физически не может заставить код работать быстрее.