Как сопрограммы могут быть быстрее, чем потоки?

Я пытаюсь найти ситуацию, когда изменение многопоточности на сопрограммы ускорит обработку затронутого раздела кода. Насколько я понял, что сопрограммы используют меньше CPU и пространства кучи по сравнению с потоками, я все еще не могу найти случай, когда сопрограммы быстрее, чем потоки. Хотя я знаю, что создание сопрограмм и контекст-коммутация намного дешевле, чем соответствующие операции с потоками, у меня есть незаметные результаты в разнице скоростей (без создания потока нитей оба случая будут абсолютно одинаковыми).

Итак, можно ли даже найти случай, когда сопрограммы будут быстрее выполнять выполнение больше, чем потоки?

Solutions Collecting From Web of "Как сопрограммы могут быть быстрее, чем потоки?"

Следует отметить, что сопрограммы значительно превосходят, когда у вас их много и много. Вы можете создавать и выполнять тысячи сопрограмм без второй мысли, если вы попытаетесь сделать это через потоки, все потоки, связанные с потоками, могут быстро убить хост. Таким образом, это позволяет вам думать о массивном распараллеливании без необходимости управления рабочими потоками и исполняемыми файлами. Они также упрощают реализацию асинхронных шаблонов вычислений, которые были бы очень громоздкими для реализации с основными потоками, такими как каналы и участники.

Из сферы действия вашего вопроса, но все же следует отметить общую концепцию, поскольку варианты использования сопрограмм не ограничиваются асинхронным вычислением. Ядром coroutines являются приостанавливаемые функции, которые, например, также позволяют создавать такие генераторы, как у вас, в python, которые вы бы не сразу подключили к асинхронному программированию.