Волокна в C#: они быстрее, чем итераторы, и люди использовали их?

Неподписанный интервал не CLS-совместим и поэтому ограничил бы использование свойства на те языки, которые действительно реализуют UInt.

Посмотрите здесь:

Платформа 1.1

Введение в Библиотеку классов Платформы.NET

Платформа 2.0

Обзор

Библиотеки классов Платформы.NET

8
задан Jeremy McGee 10 December 2009 в 19:51
поделиться

3 ответа

Я не использовал его, но у меня есть интерес к этой теме . Вот одна хорошая реализация сопрограмм на C # с циклическим планировщиком: http://www.bluebytesoftware.com/blog/PermaLink.aspx?guid=71235c5a-3753-4bab-bdb0-334ab439afaf

Автор Кстати, цитируя википедию , «волокна описывают по существу ту же концепцию, что и сопрограммы». Насколько мне известно, в C # ближе всего к сопрограмме (или волокну) являются итераторы. На самом деле они очень близки к сопрограммам. Липперт опубликовал несколько замечаний об итераторах. Надеюсь, ни один из них не представляет серьезной проблемы для ваших целей.

8
ответ дан 5 December 2019 в 10:03
поделиться

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

http://csharperimage.jeremylikness.com/2010/03/sequential-asynchronous-workflows-in.html

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

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

2
ответ дан 5 December 2019 в 10:03
поделиться

Я использовал "сопрограммы", основанные на доходности, и должен сказать, что они представляют собой головную боль. Проблема, конечно, в том, что везде, где вы хотите их использовать, вы вынуждены использовать синтаксис yield. Более того, если вы не связываете доходность (родительская доходность дочернего объекта), вы можете вложить свои сопрограммы только на один уровень глубиной. Это полностью уничтожает одно из ключевых преимуществ сопрограмм (сохранение / восстановление полного стека).

Я реализовал систему сопрограмм на основе волокна на C #, и она прекрасно работала, ДО ТОГО, как я обнаружил исключение. К сожалению, среда выполнения .Net хранит кучу внутренних исключений в потоках ОС, а это означает, что эмуляция нескольких потоков с использованием волокон ОС (и p / invoke) просто не будет работать, если у вас никогда, никогда не будет исключения.

7
ответ дан 5 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

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