Avtonova37.ru

Авто мастер
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Асинхронный режим синхронного двигателя опасен тем что

УСТРОЙСТВО ДЛЯ ЗАЩИТЫ СИНХРОННОГО ЭЛЕКТРОДВИГАТЕЛЯ ОТ АСИНХРОННОГО РЕЖИМА Российский патент 1994 года по МПК H02H7/08

Изобретение относится к электротехнике.

Известно устройство для быстродействующего АВР синхронных двигателей, содержащее блок контроля угла и знака скольжения, входы которого подключены к напряжению секции шин основного источника и к одноименному напряжению секции шин резервного источника. Блок контроля угла и знака скольжения в этом устройстве выполнен на основе пускового и избирательных фазочувствительных органов. Если задать угол срабатывания пускового фазочувствительного органа меньше 90 о (например 30 о ), то возможна реализация быстродействующего АВР. Такое устройство может достаточно быстро и селективно выявлять потерю питания синхронных двигателей от основного источника и производить их переключение на резервный источник, если вектор напряжения основного источника отстает по фазе относительно вектора одноименного напряжения резервного источника на заданный угол [1] .

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

Известно устройство для защиты синхронного электродвигателя от асинхронного режима, содержащее датчик выявления асинхронного режима синхронного электродвигателя, входы которого подключены к напряжению секции шин основного источника и к току синхронного двигателя, а выход к схеме автоматической ресинхронизации синхронного двигателя, а через элемент выдержки времени к выключателю синхронного двигателя [3] . В этом устройстве датчик выявления асинхронного режима выполнен с использованием [2] . При этом такое устройство может достаточно быстро и селективно выявлять асинхронные режимы синхронного двигателя.

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

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

На фиг. 1 показана блок-схема предлагаемого устройства; на фиг. 2 — характеристики его срабатывания.

Устройство содержит источник 1 питания на высокой стороне питающего напряжения, первый 2 и второй 3 рабочие трансформаторы напряжения, выключатели 4 и 5 первого и второго ввода, секционный выключатель 6, секции шин 7 и 8 основного и резервного источников питания, первый 9 и второй 10 измерительные трансформаторы напряжения, выключатель 11 синхронного двигателя, измерительный трансформатор 12 тока, синхронный электродвигатель 13, блок 14 контроля угла и знака скольжения, датчик 15 выявления асинхронного режима синхронного электродвигателя, элемент 16 выдержки времени, элемент ИЛИ 17, схему 18 автоматической ресинхронизации синхронного двигателя, , — одноименные напряжения, пропорциональные напряжения секции шин 7 основного источника и секции шин 8 резервного источника, δор — сигнал, появляющийся на выходе блока 14, если вектор напряжения отстает по фазе относительно вектора напряжения на заданный угол.

Датчик 15 выявления асинхронного режима синхронного электродвигателя подключен своими входами (через трансформаторы 9 и 12) к напряжению секции шин 7 основного источника и к току синхронного электродвигателя 13, а выходом — через элемент ИЛИ 17 к схеме 18 автоматической ресинхронизации синхронного электродвигателя 13, и через элемент 16 выдержки времени — к выключателю 11 синхронного двигателя, входы блока 14 контроля угла и знака скольжения подключены (через трансформаторы 9 и 10) к напряжению секции шин 7 основного источника и к одноименному напряжению секции шин 8 резервного источника, а выход его подключен к другому входу элемента ИЛИ 17.

В нормальном режиме выключатели 4, 5 и 11 включены, выключатель 6 отключен, а элементы 14-18 находятся в несработанном состоянии. При этом напряжения и могут расходиться на небольшой угол, который обычно не превышает 5 о . На фиг. 2 приведена характеристика срабатывания для блока 14. Если расположить вектор совпадающим с действительной осью, то угол между векторами и будет отрицательным, если вектор UI отстает от вектора .

Пусть уставка по углу срабатывания блока 14 δср задана, равной, например, 80 о (в опытном образце возможна также регулировка этого угла в диапазоне 20-95 о );
При потере питания секции шин 7 основного источника (например, ошибочным отключением выключателя на высокой стороне питающего напряжения трансформаторы 2) происходит медленный выбег синхронного электродвигателя 13, поэтому напряжение секции шин 7 в первый момент времени не уменьшается, а частота его начинает медленно уменьшаться. При этом напряжение начинает медленно отставать по фазе относительно , а вектор движется относительно вектора по часовой стрелке (см. фиг. 2). При наличии быстродействующего АВР и быстродействующих выключателей 4 и 6 (если постоянная времени электродвигателя 13 при его выбеге достаточно валика), время потери питания может быть относительно мало, и поэтому обеспечивается быстрое отключение выключателя 4 и включение выключателя 6, еще до момента срабатывания блока 11. При этом напряжения и начинают совпадать по фазе, а элементы 14-18 не срабатывают. Однако, в общем случае, если постоянная времени электродвигателя 13 при его выбеге достаточно мала, а время отключения выключателя 4 и включения выключателя 6 достаточно велико, то напряжение на секции шин 7 успевает разойтись по фазе относительно напряжения на секции шин 8 на угол, превышающий угол срабатывания δср блока 14. При этом блок 14 срабатывает и через элемент ИЛИ 17 и схему 18 отключает возбуждение электродвигателя 13. Таким образом, при достаточно высоком быстродействии схемы 18 к моменту расхождения векторов напряжений и на опасный угол (больший, например, по величине — 100 о ) происходит отключение возбуждения синхронного электродвигателя 13, чем исключается его противофазное включение в возбужденном состоянии (т. е. электродвигатель переводится в режим асинхронного пуска).

Возврат блока 14 в исходное состояние обеспечивается при угле большем по величине — 280 о , или же в момент времени, соответствующий включению резервного питания, когда напряжения и начинают совпадать по фазе. После включения резервного питания дальнейшая ресинхронизация синхронного двигателя производится с помощью датчика 15. Если в момент включения резервного питания ток синхронного двигателя достаточно большой, а сопротивление на его зажимах в переходном режиме достаточно мало, то при этом срабатывает датчик 15 и через элемент ИЛИ 17 и схему 18 обеспечивает дополнительный сигнал на отключение возбуждения синхронного электродвигателя 13. При дальнейшей успешной ресинхронизации ток двигателя уменьшается, а сопротивление на его зажимах увеличивается, поэтому датчик 15 возвращается в исходное состояние к через элемент ИЛИ 17 и схему 18 обеспечивается включение возбуждения синхронного электродвигателя 13. Если синхронизация действует не успешно, то с выдержкой времени элемента 16 обеспечивается отключение электродвигателя 13 выключателем 11.
При потере питания секции шин 8 (с синхронной нагрузкой) блок 14 не срабатывает, так как при этом знак скольжения вектора относительно положительный. При этом элементы 14-18 также не срабатывают. По сравнению с известным устройство не только быстро и селективно выявляет асинхронный режим синхронного двигателя и производит его ресинхронизацию, но также быстро и селективно выявляет опасный угол расхождения вектора напряжения секции шин основного источника относительно одноименного вектора напряжения секции шин резервного источника и в соответствии с этим производит отключение возбуждения синхронного двигателя еще до момента включения резервного питания.

Читать еще:  Чем отличается двигатель змз 402 от змз 410

Технико-экономическая эффективность устройства образуется за счет повышения надежности электроснабжения синхронных электродвигателей и уменьшения технологического ущерба у потребителей с двигательной нагрузкой.
(56) Авторское свидетельство СССР N 699610, кл. H 02 J 9/06, 1977.

Авторское свидетельство СССР N 909745, кл. H 02 H 7/08, 1980.

Заключительный отчет о НИР Донецкого политехнического института Внедрение системы самозапуска и защиты от асинхронного режима на двигателях СТД-12500 газокомпрессорных станций. Всесоюзный научно-технический информационный центр, N гос. рег. 01840056742, 1988, рис. Г. 5.1, Г. 5.3.

Способы возбуждения синхронных генераторов

Самым распространенным способом создания основного магнитного потока синхронных генераторов является электромагнитное возбуждение, состоящее в том, что на полюсах ротора располагают обмотку возбуждения, при прохождении по которой постоянного тока, возникает МДС, создающая в генераторе магнитное поле. До последнего времени для питания обмотки возбуждения применялись преимущественно специальные генераторы постоянного тока независимого возбуждения, называемые возбудителями В (рис. 1.3, а). Обмотка возбуждения (ОВ) получает питание от другого генератора (параллельного возбуждения), называемого подвозбудителем (ПВ). Ротор синхронного генератора, возбудителя и подвозбудителя располагаются на общем валу и вращаются одновременно. При этом ток в обмотку возбуждения синхронного генератора поступает через контактные кольца и щётки. Для регулирования тока возбуждения применяют регулировочные реостаты, включаемые в цепи возбуждения возбудителя r1 и подвозбудителя r2 . В синхронных генераторах средней и большой мощности процесс регулирования тока возбуждения автоматизируют.

В синхронных генераторах получила применение также бесконтактная система электромагнитного возбуждения, при которой синхронный генератор не имеет контактных колец на роторе. В качестве возбудителя в этом случае применяют обращенный синхронный генератор переменного тока В (рис. 1.3, б). Трехфазная обмотка 2 возбудителя, в которой наводится переменная ЭДС, расположена на роторе и вращается вместе с обмоткой возбуждения синхронного генератора и их электрическое соединение осуществляется через вращающийся выпрямитель 3 непосредственно, без контактных колец и щёток. Питание постоянным током обмотки возбуждения 1 возбудителя В осуществляется от подвозбудителя ПВ – генератора постоянного тока. Отсутствие скользящих контактов в цепи возбуждения синхронного генератора позволяет повысить её эксплуатационную надёжность и увеличить КПД.

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

На рис. 1.4, б представлена структурная схема автоматической системы самовозбуждения синхронного генератора (СГ) с выпрямительным трансформатором (ВТ) и тиристорным преобразователем (ТП), через которые электроэнергия переменного тока из цепи статора СГ после преобразования в постоянный ток подаётся в обмотку возбуждения. Управление тиристорным преобразователем осуществляется посредством автоматического регулятора возбуждения АРВ, на вход которого поступают сигналы напряжения на входе СГ (через трансформатор напряжения ТН) и тока нагрузки СГ (от трансформатора тока ТТ). Схема содержит блок защиты (БЗ), обеспечивающий защиту обмотки возбуждения (ОВ) от перенапряжения и токовой перегрузки.

Мощность, затрачиваемая на возбуждение, обычно составляет от 0,2 до 5 % полезной мощности (меньшее значение относится к генераторам большой мощности).
В генераторах малой мощности находит применение принцип возбуждения постоянными магнитами, расположенными на роторе машины. Такой способ возбуждения даёт возможность избавить генератор от обмотки возбуждения. В результате конструкция генератора существенно упрощается, становится более экономичной и надёжной. Однако, из-за высокой стоимости материалов для изготовления постоянных магнитов с большим запасом магнитной энергии и сложности их обработки применение возбуждения постоянными магнитами ограничено машинами мощностью не более нескольких киловатт.

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

Синхронная конструкция

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

Принцип работы

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

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

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

Особенности конструкции

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

У быстроходных генераторов количество полюсных пар равно 1. Чтобы получить ток, синхронный альтернатор надо вращать с определенной частотой. Производители создают конструкции, внутри которых присутствуют полупроводниковые трехфазные элементы. Для образования энергии применяют метод выпрямления токов переменных.

Читать еще:  Устройство для быстрого запуска двигателя в любой мороз

Система возбуждения генераторов представляет собой оборудование, созданное для производства тока. Регуляторы используют для управления электричеством. По типу действия выделяют 2 группы:

  • Пропорционального. При отклонении одного параметра равномерно трансформируют ток возбуждения.
  • Сильного. Изменения происходят при расхождении нескольких показателей.

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

Виды оборудования

По техническим особенностям синхронные альтернаторы делят на 4 группы. В турбогенераторах энергия возникает при движении специальных элементов. Скорость у моделей часто достигает 6000 об/мин. Гидроконструкции за счет отсутствия полюсов работают на малых оборотах.

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

Плюсы и минусы

Синхронные генераторы (альтернаторы) обеспечивают на выходе равномерный ток, легко переносят максимальные нагрузки и небольшие колебания. Агрегаты подойдут для выработки электричества для бытовой, компьютерной техники и точного оборудования. Сильные стороны:

  • качественная энергия;
  • стабильное напряжение;
  • практичность в эксплуатации;
  • надежность.

К недостаткам синхронных генераторов (альтернатов) относят высокую цену, создание радиопомех и слабую защиту от пыли. Для снижения жара вращающихся щеток используют вентиляторы. Система охлаждения, как пылесос, втягивает мелкие частицы, которые засоряют конструкцию и станут причиной поломок. Чтобы минимизировать проблему, профессионалы советуют регулярно осматривать и вовремя менять детали. Угольные модели прослужат до 2 лет, медно-графитовые – 4 месяца.

Серводвигатели

Виды серводвигателей

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

Серводвигатель – это двигатель, предназначенный для работы в широком диапазоне скоростей, обеспечивающий улучшенную плавность хода, пониженные вибрацию и акустические шумы. Как правило, в его состав включен датчик позиции или скорости. Управление серводвигателем происходит с помощью преобразователя частоты (инвертора). Главное отличие серводвигателя от обычного двигателя в том, что он может управляться по скорости, моменту и положению, соответственно серводвигатель возможно использовать для задач позиционирования, слежения, контурной обратботки и т.д.

Известны следующие виды серводвигателей:

серводвигатель постоянного тока

синхронный реактивный серводвигатель

Рассмотрим только первые два вида ввиду их наибольшей распростроненности.

Асинхронный серводвигатель

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

Высокие динамические характеристики за счет снижения статического и динамического рассогласования при использовании асинхронного серводвигателя в системе с ЧПУ позволяют получить малую контурную погрешность.

Далеко не на последнем месте при выборе типа двигателя стоит вопрос цены, в этом случае немаловажным аргументом является приемлемая стоимость. Благодаря вышеперечисленным качествам, асинхронный серводвигатель является самым массовым в промышленности.

Устройство асинхронного серводвигателя:


Области применения

Металлургия, намоточные устройства, экструдеры, машины для литья пластмасс под давлением, оборудование для ЦБК, печатное оборудование, упаковочное оборудование, станки с ЦПУ, пищевая промышленность и производство напитков, текстильная промышленность, прессовое штамповочное оборудование, автомобильная промышленность.

Синхронные серводвигатели

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

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

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

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

Рекуперативное (генераторное) торможение

Рекуперативное торможение применяется в основном в качестве подтормаживания перед основным торможением, либо при спуске груза, например в лифтах.

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

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

Допустим, что в начальный момент времени наш двигатель работал на характеристике 1 в точке A, после переключения скорости на более низкую, он перешел на характеристику 2 в точку B, а затем под действием тормозного момента достиг точки С, с меньшей частотой оборотов.

Генераторное торможение можно осуществить, если уменьшать частоту питания двигателя. Это возможно, если двигатель питается от тиристорного преобразователя частоты. При уменьшении частоты напряжения, уменьшается синхронная частота вращения. Частота вращения ротора, который вращается по инерции, снова окажется выше, возникнет тормозной момент, который будет снижать частоту вращения ротора. Таким образом, двигатель можно довести до полной остановки.

Асинхронность

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

Callbacks

Для написания асинхронной программы можно использовать callback-функции (от англ. callback — обратный вызов) — функции, которые будут вызваны асинхронно каким-либо обработчиком событий после завершения задачи. Переписанный пример сервера на callback-функциях:

В wait_connection() мы всё ещё ждём чего-то, но теперь вместе с этим внутри функции wait_connection() может быть реализовано подобие планировщика ОС, но с callback-функциями (пока мы ждём нового соединения, почему бы не обработать старые? Например, через очередь). Callback-функция вызывается, если в сокете появились новые данные — лямбда в async_read() , либо данные были записаны — лямбда в async_write() .

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

У такого подхода есть несколько проблем. Первую в шутку называют callback hell. Достаточно погуглить картинки на эту тему, чтобы понять, насколько это нечитаемо и некрасиво. В нашем примере всего две вложенные callback-функции, но их может быть намного больше.

Вторая проблема заключается в том, что код перестал выглядеть как синхронный: появились «прыжки» из wait_connection() в лямбды, например лямбда, переданная в async_write() , что нарушает последовательность кода, из-за чего становится невозможно предсказать, в каком порядке будут вызваны лямбды. Это усложняет чтение и понимание кода.

Async/Await

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

Пройдём по программе построчно:

  • Ключевое слово async в заголовке функции говорит компилятору, что функция асинхронная и её нужно компилировать по-другому. Каким именно образом он будет это делать, написано ниже.
  • Первые три строки функции: создание и ожидание соединения.
  • Следующая строка делает асинхронное чтение, не прерывая основной поток исполнения.
  • Следующие две строки делают асинхронный запрос в базу данных и чтение файла. Оператор await приостанавливает текущую функцию, пока не завершится выполнение асинхронной задачи чтения из БД и файла.
  • В последних строках производится асинхронная запись в сокет, но лишь после того, как мы дождёмся асинхронного чтения из БД и файла.

Это быстрее, чем последовательное ожидание сначала БД, затем файла. Во многих реализациях производительность async / await лучше, чем у классических callback-функций, при этом такой код читается как синхронный.

Корутины

Описанный выше механизм называется сопрограммой. Часто можно услышать вариант «корутина» (от англ. coroutine — сопрограмма).

Далее будут описаны различные виды и способы организации сопрограмм.

Несколько точек входа

По сути корутинами называются функции, имеющие несколько точек входа и выхода. У обычных функций есть только одна точка входа и несколько точек выхода. Если вернуться к примеру выше, то первой точкой входа будет сам вызов функции оператором asynс , затем функция прервёт своё выполнение вместо ожидания БД или файла. Все последующие await будут не запускать функцию заново, а продолжать её исполнение в точке предыдущего прерывания. Да, во многих языках в корутине может быть несколько await ’ов.

Для большего понимания рассмотрим код на языке Python:

Программа выведет всю последовательность чисел факториала с номерами от 0 до 41.

Функция async_factorial() вернёт объект-генератор, который можно передать в функцию next() , а она продолжит выполнение корутины до следующего оператора yield с сохранением состояния всех локальных переменных функции. Функция next() возвращает то, что передаёт оператор yield внутри корутины. Таким образом, функция async_factorial() в теории имеет несколько точек входа и выхода.

Stackful и Stackless

В зависимости от использования стека корутины делятся на stackful, где каждая из корутин имеет свой стек, и stackless, где все локальные переменные функции сохраняются в специальном объекте.

Так как в корутинах мы можем в любом месте поставить оператор yield , нам необходимо где-то сохранять весь контекст функции, который включает в себя фрейм на стеке (локальные переменные) и прочую метаинформацию. Это можно сделать, например, полной подменой стека, как это делается в stackful корутинах.

На рисунке ниже вызов async создаёт новый стек-фрейм и переключает исполнение потока на него. Это практически новый поток, только исполняться он будет асинхронно с основным.

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

Наличие собственного стека позволяет делать yield из вложенных вызовов функций, но такие вызовы сопровождаются полным созданием/сменой контекста исполнения программы, что медленней, чем stackless корутины.

Более производительными, но вместе с тем и более ограниченными, являются stackless корутины. Они не используют стек, и компилятор преобразует функцию, содержащую корутины, в конечный автомат без корутин. Например, код:

Будет преобразован в следующий псевдокод:

По сути здесь создаётся класс, который сохраняет всё состояние функции, а также последнюю точку вызова yield . У такого подхода есть проблема: yield может быть вызван только в теле функции-корутины, но не из вложенных функций.

Симметричные и асимметричные

Корутины также делятся на симметричные и асимметричные.

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

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

Шаблоны асинхронности

Можно выделить три самые популярные схемы асинхронных запросов. Рассмотрим их реализацию с помощью «обещаний» (JavaScript) и операторов async-await (C#).

Для демонстрации потребуются тестовые функции, которые имитируют возвращение нужных объектов с задержкой.

Последовательное выполнение

Используется для связанных задач, которые нужно запускать друг за другом. Например, первый запрос получает названия фильмов, а второй – информацию о них.

Каждая функция возвращает новый Promise , выполнение которого также можно отслеживать. В результате получается удобная одноуровневая цепочка обещаний.

Переменная str получит значение только тогда, когда отработает функция GetStringTask . Лишь после этого обработчик кода продолжит выполнение.

Параллельное выполнение

Применяется для решения независимых задач, когда важно, чтобы выполнились все запросы. Например, данные веб-страницы грузятся с трех серверов, а после этого начинается рендеринг.

Параметр results – это массив, в котором содержатся результаты всех трех выполненных операций.

Метод WaitAll класса Task собирает результаты трех запросов вместе.

Конкурентное выполнение

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

В параметр result попадет первый вернувшийся результат из трех.

Метод WaitAny дождется самого первого выполнения и положит его в переменную firstResult .

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

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector