Что такое примеры использования для сопрограммы?

Понятие сопрограммы звучит очень интересным, но я не знаю, если оно имеет смысл в реальной продуктивной среде? Что такое примеры использования для сопрограмм, которые могут быть решены более изящные, более простые или более эффективные как с другими методами?

45
задан Mnementh 19 November 2008 в 23:14
поделиться

1 ответ

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

Например, рассмотрим устройство, которое имеет пользовательский интерфейс с ЖК-дисплеем и клавиатурой и модем, и ему необходимо использовать модем для периодически вызывать и сообщать о своем статусе независимо от того, что делает пользователь на клавиатуре. Самый лучший способ написать пользовательский интерфейс может заключаться в использовании таких функций, как «input_numeric_value (& CONV_SPEED_FORMAT, & pipeline_speed);», которые будут возвращаться, когда пользователь ввел значение , и самым лучшим способом управления коммуникацией может быть использование таких функций, как «wait_for_carrier ();», которые вернутся, когда устройство либо подключится, либо определит, что не будет.

Без сопрограмм, либо подсистема пользовательского интерфейса, либо подсистема модема должен быть реализован вводится с помощью конечного автомата. Использование сопрограмм позволяет писать обе подсистемы в наиболее естественном стиле. Обратите внимание, что важно, чтобы ни одна подсистема никогда не работала очень долго, не переводя вещи в «согласованное» состояние и не вызывая yield (), ни вызывала yield (), не переводя сначала вещи в «согласованное» состояние, но обычно это несложно. ограничения.

Обратите внимание, что хотя можно использовать полноценную многозадачность, это требует повсеместного использования блокировок при изменении общего состояния. Поскольку переключатель сопрограмм никогда не будет переключать вещи, кроме как при вызовах yield (), любая подпрограмма может свободно изменять разделяемое состояние, если она гарантирует, что все в порядке до следующего yield, и подготовлена ​​к тому, что другая подпрограмма изменит состояние " во время "yield ().

10
ответ дан 26 November 2019 в 20:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: