Волокна против асинхронного ожидания
Я присоединяюсь к проекту C#, в котором разработчики активно используют Fibers. До этого проекта я даже не слышал о них и ранее использовал async await
а также Threads
а также BackgroundWorker
с моими многозадачными операциями. Сегодня я спрашивал их, почему они использовали Fiber
и главный разработчик сказал, что ему легче отлаживать. То есть он знает, из какого потока пришла конкретная функция, и даже может обращаться к переменным, расположенным выше в стеке.
Мне было интересно, каковы преимущества и недостатки использования Fiber
s против использования нового async await
и используя Thread
s.
PS: мы используем.Net 4.5
1 ответ
Я спрашивал их, почему они использовали Fibers, и главный разработчик сказал, что ему легче отлаживать. То есть он знает, из какого потока пришла конкретная функция, и даже может обращаться к переменным, расположенным выше в стеке.
Это звучит совершенно странно. При использовании библиотеки параллельных задач с пользовательскими планировщиками, отличными от стандартных ThreadPoolTaskScheduler
Вы можете сами решить, как планировать свои задачи (и это не обязательно будет в новых темах). async-await
с другой стороны, предоставляет вам удобный способ выполнения асинхронного ввода-вывода. VS дает вам возможность отлаживать асинхронный код, используя, как если бы он выполнялся синхронно.
Чтобы использовать волокна, необходимо вызвать неуправляемые API, поскольку.NET не предлагает никаких управляемых оболочек в BCL. Даже в документах по волокнам четко сказано, что нет явного преимущества их использования:
В целом, волокна не дают преимуществ по сравнению с хорошо разработанным многопоточным приложением. Однако использование волокон может упростить портирование приложений, которые были разработаны для планирования собственных потоков.
Мне было интересно, каковы преимущества и недостатки использования Fibers по сравнению с использованием нового асинхронного ожидания и использования потоков.
С помощью async-await
дает вам преимущество выполнения асинхронной работы, связанной с вводом-выводом, и при этом вы чувствуете, что выполняете синхронно Библиотека параллельных задач обеспечивает простой способ планирования работы с выделенными потоками, будь то потоки пула потоков или новые потоки, позволяя при этом подключиться к механизму, который планирует эти единицы работы. Я действительно не вижу преимуществ в использовании волокон сегодня, со всеми возможностями, которые может предложить.
Я думаю, что вы должны сказать своему главному разработчику прочитать о многопоточной и асинхронной работе ввода-вывода, используя Task Parallel Library и async-await
соответственно. Я думаю, что это облегчит жизнь всем вам.