Потоковая связь и накладные расходы на объекты - PullRequest
0 голосов
/ 24 февраля 2012

Жители переполнения стека Мне нужны ваши знания. Я работаю над системой обработки видео, использующей WPF и базовые коммуникации сокетов C # .NET. Каждый клиент передает видео данные со скоростью 30 кадров в секунду на сервер в среде локальной сети для обработки. Часть обработки обрабатывается каждым клиентом для уменьшения нагрузки на сервер.

Я изучил программирование в среде, в которой аппаратные ограничения никогда не были проблемой. Видео меняет это .. "Hello World" не подготовил меня к этому, мягко говоря. Реализация любого из этих двух перспективных методов не является серьезной проблемой. Определение того, чему я должен посвятить свое время и энергию, - это то место, где мне нужна помощь.

У меня есть два варианта (но открыты для предложений!), При условии, что аппаратное обеспечение ограничивает получение клиентами результатов, максимально приближенных к реальному времени:

- Клиент в очереди-- Клиент обрабатывает очередь видеокадров. Каждый кадр обрабатывается и затем отправляется через TCP-пакеты на сервер для дальнейшего анализа. Эта система обрабатывает только один кадр за раз в порядке захвата датчика и передает его на сервер через клиент статического сокета. * Эта система не может использовать преимущества современного многоядерного оборудования.

- резьбовой клиент-- Клиент использует потоковую (фоновую обработку) обработку и передачу каждого кадра на сервер. Каждый новый кадр запускает новый поток обработки, а также создание нового класса сетевого взаимодействия. * Эта система использует современное оборудование, но может вызывать серьезные проблемы со временем.

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

Что еще более важно, будет ли создание нового класса связи сокетов, а также нового (простого) класса обработки видео создавать достаточные издержки, чтобы каждый кадр НЕ ставился в очередь или обрабатывался параллельно?

Код только начинает обретать форму. Аппаратное обеспечение клиентских систем неизвестно, и поэтому их производительность не может быть определена. Как бы вы продолжили разработку?

Я студент колледжа. Таким образом, любой вклад помогает мне в разработке моего первого реального применения моих знаний.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

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

Видео обычно требует каждого доступного трюка для оптимизации производительности. Пулы объектов фрейма (оптимально распределенные, чтобы избежать ложного обмена), чтобы избежать сбора мусора, threadPools для обработки изображений и т. Д.

'Будет ли доставка данных настолько нарушена, что создаст новую проблему?' - вполне возможно, если вы не укажете и не примените подходящую минимальную скорость и доступность сети, некоторые потоки могут растягивать доступную буферизацию до точки, где кадры должны быть отброшены, дублированы или интерполированы для поддержания синхронизации. Эффективное выполнение этого является частью удовольствия от видео протоколов:)

0 голосов
/ 24 февраля 2012

Существует только один действительный ответ: «Достаточно ли производительности XXXXXXX» - попробуйте и измерьте.

В вашем случае вы должны оценить

  • сетевой трафик к / от сервера.
  • количество клиентов / количество единиц работы в единицу времени, которое отправляют клиенты (т. Е. Общее количество кадров в секунду в вашем случае)
  • сколько времени займет обработка единицы работы

Когда вы оцениваете требования - посмотрите, выглядит ли это разумно (т. Е. Наличие 10 Тбит / с входящих данных не может быть обработано ни одной нормальной машиной, в то время как 100 Мбит / с может работать с обычной сетью 1 Гбит).

Чем можно создать самую базовую версию системы (т. Е. Использовать ASP.Net для создания одностраничного сайта и публиковать на нем файлы с необходимой скоростью, для «обработки» использовать Thread.Sleep) и наблюдать / измерять результаты.

Что касается вас, «будет ли создание объекта медленным» - крайне маловероятно, что оно будет иметь значение для вашего случая, так как вы планируете отправлять огромное количество данных по сети.Но это очень легко попробовать самим - StopWatch + new MyObject() покажет вам подробное время.

...