Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Introduction

Boost , Chapter 1. Coroutine , Chapter 1. Coroutine

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Definition

В компьютерных науках рутины определяются как последовательность операций. Выполнение рутины образует отношения между родителями и детьми, и ребенок заканчивается всегда перед родителем. Coroutines (термин был введен Melvin Conway [1]), являются обобщением рутины (Donald Knuth [2]. Основное различие между корутинами и рутиной заключается в том, что корутина позволяет явно приостановить и возобновить его прогресс посредством дополнительных операций, сохраняя состояние исполнения и, таким образом, обеспечивает расширенный поток управления (поддерживая контекст исполнения).

How it works

Функции foo() и bar() должны чередовать их исполнение (выпустить и ввести функциональный орган).

foo_bar

Если корутины были названы точно как рутины, стек будет расти с каждым вызовом и никогда не будет всплывать. Перепрыгнуть в середину корутина было бы невозможно, потому что обратный адрес был бы на вершине входов стека.

Решение состоит в том, что каждый корутин имеет свой собственный стек и блок управления (boost::contexts_t от Boost.Context). До того, как корутина будет приостановлена, негальванические регистры (включая стек и инструкцию/указатель программы) действующего в настоящее время корутина хранятся в блоке управления. Регистры вновь активированного корутина должны быть восстановлены из связанного с ним блока управления до его возобновления.

Контекстный переключатель не требует системных привилегий и предоставляет кооперативное многозадачное удобное для C++. Корутины обеспечивают квази параллелизм. Когда программа должна делать несколько вещей одновременно, coroutines помогает делать это гораздо проще и элегантно, чем только с одним потоком управления. Преимущества можно увидеть особенно ясно с использованием рекурсивной функции, такой как траверсаль бинарных деревьев (см. пример «самая грань»).

characteristics

Характеристики [3] coroutine:

  • значения локальных данных сохраняются между последовательными вызовами (контекстовые переключатели)
  • исполнение приостановлено, поскольку контроль оставляет корутин и возобновляется в определенное время позже
  • симметричный или асимметричный механизм управления-передатчика; см. ниже
  • первоклассный объект (может быть передан в качестве аргумента, возвращен процедурами, сохраненный в структуре данных для использования позже или свободно управляемый разработчиком)
  • стека или нет

Корутины полезны в симуляции, искусственном интеллекте, параллельном программировании, обработке текста и манипулировании данными, поддерживая реализацию таких компонентов, как совместные задачи (волокны), итераторы, генераторы, бесконечные списки, трубы и т.д.

execution-transfer mechanism

Существуют две категории корутин: симметричные и асимметричные корутины.

Асимметричный корутин знает своего коллектора, используя специальную операцию, чтобы подразумевать контроль непосредственно его коллектору. В отличие от этого, все симметричные корутины эквивалентны; один симметричный корутин может передавать контроль любому другому симметричному корутину. Из-за этого симметричная корона must указывает маршрут, к которому она намерена получить контроль.

foo_bar_seq

Оба понятия эквивалентны, и полностью общая корутинная библиотека может обеспечить либо симметричные, либо асимметричные корутины. Для удобства, наслаждайтесь. Корутин предоставляет оба.

stackfulness

В отличие от бесстекной корутины, стеклянный корутин может быть оторван из вложенного стекфрейма. Исполнение возобновляется в тот же момент в коде, где оно было приостановлено ранее. С бесстекной корутиной может быть приостановлена только рутина верхнего уровня. Любая рутина, вызванная этой рутиной верхнего уровня, сама по себе не может приостановиться. This prohibits providing suspension/resume operations in routines within a general- purposes library.

first-class continuation

Продолжение первого класса может быть передано в качестве аргумента, возвращено функцией и сохранено в структуре данных, которая будет использоваться позже. В некоторых реализациях (например, C# yield) продолжение не может быть напрямую доступно или непосредственно манипулировано.

Без стека и первоклассной семантики некоторые полезные потоки управления исполнением не могут быть поддержаны (например, кооперативная многозадачность или контрольно-пропускные пункты).



[1] Conway, Melvin E.. "Design of a Separable Transition-Diagram Compiler". Commun. ACM, Volume 6 Issue 7, July 1963, Article No

[2] Кнут, Дональд Эрвин (1997). «Фундаментальные алгоритмы. The Art of Computer Programming 1, (3rd ed.)

[3] Мура, Ana Lucia De and Ierusalimschy, Roberto. «Revisiting coroutines». ACM Транс. Программа. Lang. Syst., Volume 31 Issue 2, February 2009, Article No. 6


PrevUpHomeNext

Статья Introduction раздела Chapter 1. Coroutine Chapter 1. Coroutine может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Coroutine ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:43:34/0.0045170783996582/0