Волокна против асинхронного ожидания

Я присоединяюсь к проекту C#, в котором разработчики активно используют Fibers. До этого проекта я даже не слышал о них и ранее использовал async await а также Threads а также BackgroundWorkerс моими многозадачными операциями. Сегодня я спрашивал их, почему они использовали Fiberи главный разработчик сказал, что ему легче отлаживать. То есть он знает, из какого потока пришла конкретная функция, и даже может обращаться к переменным, расположенным выше в стеке.

Мне было интересно, каковы преимущества и недостатки использования Fibers против использования нового async await и используя Threads.

PS: мы используем.Net 4.5

1 ответ

Решение

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

Это звучит совершенно странно. При использовании библиотеки параллельных задач с пользовательскими планировщиками, отличными от стандартных ThreadPoolTaskSchedulerВы можете сами решить, как планировать свои задачи (и это не обязательно будет в новых темах). async-await с другой стороны, предоставляет вам удобный способ выполнения асинхронного ввода-вывода. VS дает вам возможность отлаживать асинхронный код, используя, как если бы он выполнялся синхронно.

Чтобы использовать волокна, необходимо вызвать неуправляемые API, поскольку.NET не предлагает никаких управляемых оболочек в BCL. Даже в документах по волокнам четко сказано, что нет явного преимущества их использования:

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


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

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

Я думаю, что вы должны сказать своему главному разработчику прочитать о многопоточной и асинхронной работе ввода-вывода, используя Task Parallel Library и async-awaitсоответственно. Я думаю, что это облегчит жизнь всем вам.

Другие вопросы по тегам