Каковы различия между потоком данных TPL (TDF) и реактивными расширениями? - программирование

Каковы различия между потоком данных TPL (TDF) и реактивными расширениями?

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

  • в RX есть виртуальное время, поэтому планировщик эффективно контролирует всю сеть, но это невозможно в TDF, потому что каждый блок использует разные задачи, и они запускаются независимо.
  • в TDF блок может повторить попытку получения сообщения/повторной отправки и т.д., но в RX это невозможно.
  • в rx поток данных сериализуется, но в TDF это необязательно

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

4b9b3361

Ответ 1

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

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

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

Rx

Reactive Extensions (Rx) - это библиотека для составления асинхронных и на основе событий с использованием наблюдаемых последовательностей и запросов в стиле LINQ операторы. Используя Rx, разработчики представляют асинхронные потоки данных, используя LINQ и параметризовать concurrency в асинхронном потоки данных с использованием планировщиков. Проще говоря, Rx = Observables + LINQ + Планировщики

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

потоки данных TPL

Параллельная библиотека задач (TPL) предоставляет компоненты потока данных, которые помогают повысить надежность приложений с поддержкой concurrency. Эти компоненты потока данных в совокупности называются потоком данных TPL Библиотека. Эта модель потока данных стимулирует программирование на основе предоставление сквозной передачи сообщений для крупнозернистого потока данных и конвейерные задачи. Компоненты потока данных основываются на типах и планирование инфраструктуры TPL и интеграция с С#, Visual Basic и F # для асинхронного программирования. Эти компоненты потока данных полезны, когда у вас есть несколько операций, которые должны взаимодействовать друг с другом асинхронно или когда вы хотите обрабатывать данные по мере их появления. Например, рассмотрим приложение, которое обрабатывает данные изображения с веб-камеры. Используя модель потока данных, приложение может обрабатывать кадры изображений, поскольку они становятся доступными. Если приложение улучшает рамки изображения, для Например, выполняя коррекцию света или уменьшение эффекта "красных глаз", вы можете создать конвейер компонентов потока данных. Каждый этап трубопровода может использовать более крупнозернистые функции parallelism, такие как функциональность, предоставляемая TPL, чтобы преобразовать изображение.