Многопоточная сериализация в C # - PullRequest
2 голосов
/ 20 января 2011

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

Есть идеи, как это сделать?

Каков наилучший алгоритм для определения необходимости большего или меньшего количества потоков?

Как правильно объединить результаты сериализации из нескольких потоков?

Пожалуйста, ответьте на любой из этих вопросов? Спасибо

Ответы [ 2 ]

2 голосов
/ 20 января 2011

Это можно рассматривать как проблему производителя / потребителя. В Fx4 вы можете использовать BlockingCollection.

Но, честно говоря, я бы ожидал, что узким местом является (сетевой) ввод-вывод, а не сериализация.Вам придется измерить.

1 голос
/ 20 января 2011

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

...