Есть ли хороший пример реального мира для сопрограмм

В настоящее время я много читаю о сопрограммах. Хотя я думаю, что только частично понимаю, что они делают (например, разрешают возвращать и продолжать функцию в определенный момент), я действительно не знаю, почему мне следует их использовать. Я не вижу никакой реальной пользы в использовании сопрограммы. Для меня эти вещи похожи на goto с дополнительными шагами. Может ли кто-нибудь дать мне хороший пример из реальной жизни, где сопрограмма действительно может улучшить кодовую базу? Может быть, это помогает мне понять концепцию.

1 ответ

Сопрограммы позволяют нам моделировать совместные многозадачные системы очень простым и модульным способом. Этот тип систем может удовлетворить многие проблемы, такие как игры с несколькими агентами, симуляторы фондового рынка, операционные системы и т. Д.

Простота проистекает из того факта, что нам могут понадобиться только две функциональные сопрограммы для выражения концепции в коде. Классы, государственные структуры, указатели на функции больше не требуются. Ниже приведена иллюстрация псевдокода, которая определяет scheduler и task, В отличие от обычных функций, оба экземпляра task передать исполнение друг другу после do_one_step вызов.

void scheduler(list<task> tasks) {
   while(true) {
     for(t : tasks)
       await t;
   }
}

void task(int arg) {
   while(1) {
     do_one_step(arg);
     yield;
   }
}

void main() { await scheduler( list( { task(0), task(1) } ); }

Что еще более важно, код для task теперь может быть модульным: задачи могут включать в себя подзадачи, которые напоминают его структуру. Любая подзадача может быть задана как правильная задача:

void subtask(int arg) {
  do_one_step(arg);
  yield;
  do_one_step(arg);
  yield;
}

void task(int arg) {
   while(1) {
     await subtask(arg);
     yield;
   }
}

void main() { await scheduler( list({task(0), task(1), subtask(2)}); }

Сопрограммы позволяют нам объединять подзадачи в более крупные задачи и предоставляют нам новый инструмент для модульной реализации наших решений.

Другие вопросы по тегам