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

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

Мне было интересно узнать о преимуществах и недостатках использования Fiber vs с использованием нового async await и использования Thread s.

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

Ответ 1

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

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

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

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


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

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

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