---
title: "Параллельное программирование. TPL DataFlow"
description: "Поговорим немного о TPL Dataflow. Эта библиотека, позволяющая повысить производительность и устойчив..."
author: "Hes"
published: "2015-08-20T23:24:38+00:00"
modified: "2015-08-21T05:21:41+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/parallelnoe-programmirovanie-tpl-dataflow-531280"
markdown_url: "https://yvision.kz/post/parallelnoe-programmirovanie-tpl-dataflow-531280/markdown"
site_name: "Yvision.kz"
---

# Параллельное программирование. TPL DataFlow

> Поговорим немного о TPL Dataflow. Эта библиотека, позволяющая повысить производительность и устойчив...

Поговорим немного о TPL Dataflow.

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

Для .Net Framework 4.0 и 4.5 библиотека поставляется посредством NuGet.

Подход, используемый в TPL Dataflow, состоит в следующем:

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

В TPL Dataflow используется парадигма программирования потоков данных: [Вики](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)

В TPL DataFlow существуют 3 основных вида блоков:
- Блоки источники - источники данных, из которых можно читать.

- Блоки приёмкники - приёмники данных, в которых можно писать.

- Блоки распространители - являются одновременно и источниками и приёмниками данных.

Блоки можно связывать, образуя вычислительные конвейеры. Один блок-источник можно связывать с множеством блоков-приёмников. Один блок-приёмник можно связывать с множеством блоков-источников. В методе связывания источника с целевым объектом LinkTo, можно указать делегат, который определяет, принимает или отклоняет целевой блок сообщение в зависимости от содержания этого сообщения. Механизм фильтрации позволяет гарантировать, что блок потока данных будет получать только определенные значения.

Существует 3 категории блоков: буферные, исполнительные, группирующие.

- Блоки буферизации хранят данные для использования блоками потребителями данных.

- Исполнительные блоки выполняют заданный делегат над каждым принятым сообщением.

- Группирующие блоки объединяют данные от множества источников с разными ограничениями.

Практический пример.

Хороший пример можно найти [тут](https://msdn.microsoft.com/ru-ru/library/hh228604(v=vs.110).aspx), [тут](http://habrahabr.ru/post/138531/) и [тут](http://www.jayway.com/2013/11/15/an-actor-model-implementation-in-c-using-tpl-dataflow/).

---

Source: [https://yvision.kz/post/parallelnoe-programmirovanie-tpl-dataflow-531280](https://yvision.kz/post/parallelnoe-programmirovanie-tpl-dataflow-531280)