Типы асинхронных двигателей, разновидности, какие бывают двигатели. Асинхронный режим возбужденной синхронной машины

При обращении к асинхронному (также называемому неблокирующим) примитиву, процесс не приостанавливается.

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

Если копии сообщения не создается, то любые изменения сообщения, производимые передающим процессом уже после обращения к примитиву Send, но до отправки сообщения, являются рискованными.

Аналогично, после обращения к асинхронному примитиву Receive процесс продолжает работу. Когда сообщение прибывает, процесс информируется об этом событии путем прерывания или периодического опроса.

Асинхронные примитивы обеспечивают эффективное и гибкое обращение процессов к системе передачи сообщений.

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

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

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

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

Блокирующий примитив Receive не возвратит управление, пока сообщение не окажется в выделенном для него буфере.

Уделенные вызовы процедур

Уделенный вызов процедуры (Remote Procedure Call, RPC) представляет собой вариант базовой модели передачи сообщения.

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

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

Популярность этого подхода связана со следующими преимуществами:

Вызов процедуры представляет собой широко распространенную и понятную абстракцию.

Уделенные вызовы процедур позволяют специфицировать удаленный интерфейс в виде множества именованных операций с объектами указанных типов. Таким образом, интерфейс может быть четко и ясно документирован, а в распределенной программе можно выполнить статический контроль типов.

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

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

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

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

Например: CALL P(X. Y)

Здесь ♦ Р - имя процедуры;

♦ X - передаваемые аргументы;

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

Стаб создает сообщение, идентифицирующее вызываемую процедуру и содержащее ее параметры. Затем он посылает это сообщение удаленной системе и ждет ответа.

Когда ответ получен, стаб возвращает управление вызвавшей ее программе и передает ей возвращаемые значения. На удаленной машине с вызываемой процедурой ассоциируется другой стаб.

Когда приходит сообщение, стаб исследует его и на основе полученных имени процедуры и параметров формирует обычное локальное обращение CALL P(X, Y).

То есть удаленная процедура вызывается локально, при этом выполняется стандартная передача параметров через стек.

Рис. 17.13. Механизм удаленного вызова процедур

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

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

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

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

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

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

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

4.4 Сравнение синхронных и асинхронных систем связи

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

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

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

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

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

Большинство систем цифровой связи, использующих когерентную модуляцию, требуют всех трех уровней синхронизации: фазовой, символьной и кадровой. Системы с некогерентной модуляцией обычно требуют только символьной и кадровой синхронизации; поскольку модуляция является некогерентной, точной синхронизации фазы не требуется. Кроме того, некогерентным системам необходима частотная синхронизация. Частотная синхронизация отличается от фазовой тем, что копия несущей, генерируемая приемником, может иметь произвольные сдвиги фазы от принятой несущей. Структуру приемника можно упростить, если не предъявлять требование относительно определения точного значения фазы поступающей несущей. К сожалению, это упрощение влечет за собой ухудшение зависимости достоверности передачи от отношения сигнал/шум.

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

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

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

Для цифровой связи компромиссы между производительностью и сложностью приемника часто рассматриваются при выборе модуляции. В число простейших цифровых приемников входят приемники, разработанные для использования с бинарной схемой FSK с некогерентным обнаружением. Единственное требование – битовая синхронизация и сопровождение частоты. Впрочем, если в качестве модуляции выбрать когерентную схему BPSK, то можно получить ту же вероятность битовой ошибки, но при меньшем отношении сигнал/шум (приблизительно на 4 дБ). Недостатком модуляции BPSK является то, что приемник требует точного отслеживания фазы, что может представлять сложную конструктивную проблему, если сигналы обладают высокими доплеровскими скоростями или для них характерно замирание.

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

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


Заключение

В первом разделе моей работы описаны принципы построения беспроводных телекоммуникационных систем связи: приведена схема построения системы сотовой связи, указаны методы разделения абонентов в сотовой связи и отмечены преимущества (конфиденциальность и помехоустойчивость) кодового разделения по сравнению с временным и частотным, а также рассмотрены распространенные стандарты беспроводной связи DECT, Bluetooth и Wi-Fi (802.11, 802.16).

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

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

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


Список литературы:

1. Ратынский М.В. Основы сотовой связи / Под ред. Д. Б. Зимина – М.: Радио и связь, 1998. – 248 с.

2. Скляр Б. Цифровая связь. Теоретические основы и практическое применение, 2-е издание.: Пер. с англ. – М.: Издательский дом “Вильямс”, 2003. – 1104 с.

3. Шахнович И. Современные технологии беспроводной связи. Москва: Техносфера, 2004. – 168 с.

4. Баскаков С.И. Радиотехнические цепи и сигналы: Учеб. для вузов по спец. «Радиотехника». – 3-е изд., перераб. и доп. – М.: Высш. шк., 2000. – 462 с.

5. Шумоподобные сигналы в системах передачи информации. Под ред. проф. В.Б. Пестрякова. М., «Сов. радио», 1973. – 424 с.

6. Варакин Л.Е. Системы связи с шумоподобными сигналами. – М.: Радио и связь, 1985. – 384 с.

7. Вишневский В.М., Ляхов А.И., Портной С.Л., Шахнович И.В. Широкополосные беспроводные сети передачи информации. Москва: Техносфера, 2005. – 592 с.

8. Радченко Ю.С., Радченко Т.А. Эффективность кодового разделения сигналов с неизвестным временем прихода. Труды 5 междунар. конф. «Радиолокация, навигация, связь» - RLNC-99, Воронеж, 1999, т.1, с. 507-514.

9. Радиотехнические системы: Учеб. для вузов по спец. «Радиотехника» / Ю.П. Гришин, В.П. Ипатов, Ю.М. Казаринов и др.; Под ред. Ю.М. Казаринова. – М.: Высш. шк., 1990. – 469 с.

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

Асинхронный режим (asynchronous regime ) – переходный режим в энергосистеме, характеризующийся несинхронным вращением части генераторов энергосистемы.

Асинхронные режимы могут возникать в результате:

Нарушения статической устойчивости из-за увеличения передаваемой мощности по линиям электропередачи сверхдопустимого значения;

Нарушения динамической устойчивости из-за аварийных возмущений (коротких замыканий, отключение генерирующего оборудования или электроустановок потребителя);

Несинхронного включения линий электропередачи и генераторов;

Потери возбуждения генератора.

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

1. Асинхронный режим возбужденной синхронной машины

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

Характерная особенность указанной зависимости - наличие четко выраженного максимума и минимума. Отличие асинхронного режима от синхронных качаний с точки зрения изменения тока заключается только в величине максимального значения тока в цикле качаний и в длительности этих качаний. Поскольку угол при синхронных качаниях теоретически может достигать своего критического значения, нельзя отличить асинхронный режим от синхронных качаний только по значению тока. Поэтому устройства АЛАР, основанные на выявлении асинхронного режима по колебаниям тока, настраиваются на работу на втором, третьем и т.д. цикле асинхронного режима. Другими словами, селективно асинхронный режим можно выявить лишь по длительным колебаниям тока с амплитудой не менее заданной и периодом не более расчетного.

Зависимость изменения напряжения и взаимного угла между двумя векторами напряжения при асинхронном режиме

Выражение для определения напряжения в промежуточных точках определяется в соответствии со вторым законом Кирхгофа по следующей формуле:

Относительная удаленность контролируемой точки с напряжением от точки с напряжением .

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

против часовой стрелки ускоряются

Если вектор энергосистемы №2 вращается по часовой стрелке , то это свидетельствует о том, что генераторы энергосистемы №2 тормозятся относительно генераторов энергосистемы №1.

В качестве примера рассмотрим вращение вектора системы №2 в представленной расчетной схеме «по часовой стрелке».

Анализ полученных выражений показывает, что в момент расхождения напряжения системы №1 и системы №2 на угол 180 градусов (асинхронный проворот) активная мощность меняет свой знак, а значение реактивной мощности достигает своего максимального значения. Данная особенность изменения мощности в момент асинхронного проворота используется различными производителями в устройствах АЛАР независимо от элементной базы (электромеханические или микропроцессорные устройства).

В общем случае годограф вектора полной мощности (S = P + j Q) в месте измерения (установки реле мощности) представляет собой эллипс (зависимость P от Q) при изменении угла. Особенности изменения годографа мощности в цикле асин-хронного хода позволяют выявить момент наступления асинхронного режима, если есть возможность зафиксировать переход указанного годографа из диапазона углов ~0<δ<180° в диапазон ~180 0 <δ<360 0 при выполнении дополнительного условия, характеризующего зону δ≈180°.

Зависимость изменения сопротивления при асинхронном режиме

Сопротивление на зажимах реле сопротивления определяется как частное от деления напряжения в контролируемой точке на ток

С учетом соотношения между модулями напряжения по концам линии электропередачи полученное выражение может быть преобразовано в следующем виде:

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

Мне любопытно, что async ожидает встроенные функции потоковой передачи.

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

Но рассмотрим этот сценарий.

У меня есть async methodA, выполняющий операцию async в базе данных. Api базы данных предоставляет функцию BeginQuery и событие QueryCompleted. Я завернул их в задачу (с использованием TaskCompletionSource).

Мой вопрос заключается в том, что происходит под капотом между вызовом BeginQuery и срабатыванием QueryCompleted.

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

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

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

При вызове асинхронного метода всегда создается новый рабочий поток?

Может ли кто-нибудь подтвердить мое понимание?

4 ответов

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

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

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

Нет. На уровне ОС все операции ввода/вывода являются асинхронными. Это синхронные API-интерфейсы, которые блокируют поток, в то время как основной асинхронный ввод-вывод выполняется. Я недавно написал это в сообщении в блоге: .

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

Порты ввода/вывода обеспечивают элегантное решение проблемы написание масштабируемых серверных приложений, использующих многопоточность и асинхронный ввод-вывод.

Я имею в виду - не нужно ли создавать какого-то рабочего, чтобы мероприятие? На очень низком уровне должен быть некоторый синхронный цикл, который блокировка результата чтения нити из db.

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

Например, синхронный код:

Void Consume() { var completedMre = new ManualResetEvent(false); producer.StartOperation(completedMre); completedMre.WaitOne(); // blocking wait Console.WriteLine(producer.DequeueResult()); }

Асинхронный аналог:

Async Task ConsumeAsync() { var completedMre = new ManualResetEvent(false); producer.StartOperation(completedMre); var tcs = new TaskCompletionSource(); ThreadPool.RegisterWaitForSingleObject(completedMre, (s, t) => tcs.SetResult(producer.DequeueResult()), null, Timeout.Infinite, true); var result = await tcs.Task; Console.WriteLine(result); }

Асинхронная версия масштабируется более чем в 64 раза (MAXIMUM_WAIT_OBJECTS), что максимальное количество объектов ядра, которое может быть агрегировано RegisterWaitForSingleObject для ожидания в одном потоке). Таким образом, вы можете вызвать Consume() в 64 раза параллельно, и он будет блокировать 64 потока. Или вы можете вызвать ConsumeAsync в 64 раза и заблокировать только один поток.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: