Это задание для потока данных TPL?

Я запускаю довольно типичную модель производителя/потребителя для разных задач.

Задача 1: Считывает пакеты byte[] из двоичных файлов и запускает новую задачу для каждой коллекции байтовых массивов. (операция группируется для целей управления памятью)

Задача 2-n: Это рабочие задачи, каждая из которых работает с переданным набором (из Tasks1) байтовых массивов и десериализует байтовые массивы, сортирует их по определенным критерии, а затем сохраняет коллекцию результирующих объектов (каждый массив байтов десериализуется в такой объект) в Concurrent Dictionary.

Задача (n+1) Я выбрал параллельный словарь, потому что задача этой задачи состоит в том, чтобы объединить те коллекции, которые хранятся в параллельном словаре, в том же порядке, в котором они были созданы в Task1. Я достигаю этого, передавая идентификатор коллекции (он имеет тип int и увеличивается для каждой новой коллекции в Task1) на всем пути от Task1 до этой задачи. Эта задача в основном проверяет, сохранен ли уже следующий ожидаемый идентификатор коллекции в параллельном словаре, и если да, извлекает его, добавляет в конечную очередь и проверяет наличие следующей коллекции в параллельном словаре.

Теперь, исходя из того, что я читал и смотрел видео, мне кажется, что TPL Dataflow может быть идеальным кандидатом для такой модели производитель/потребитель. Кажется, я просто не в состоянии разработать дизайн и, следовательно, начать работу, потому что я никогда не работал с потоком данных TPL. С точки зрения пропускной способности и задержки, эта библиотека даже справляется с поставленной задачей? В настоящее время я обрабатываю массивы размером 2,5 миллиона байт и, следовательно, объекты в секунду в результирующих коллекциях. Может ли TPL Dataflow помочь упростить? Меня особенно интересует ответ на следующий вопрос: может ли поток данных TPL сохранить порядок пакетов сбора из Task1 при создании рабочих задач и их повторном объединении после того, как рабочие задачи выполнили свою работу? Это оптимизирует вещи? Профилировав всю структуру, я чувствую, что довольно много времени потрачено впустую из-за вращения и слишком большого количества параллельных коллекций.

Есть идеи, мысли?

10
задан svick 2 January 2014 в 22:08
поделиться