Производительность сериализации объекта - PullRequest
0 голосов
/ 26 ноября 2009

Допустим, у меня есть простой tcp-сервер, который генерирует массив внутри потока, сериализует его и отправляет клиенту по tcp-соединению, а когда он достигает клиента, клиент десериализует его и выполняет что-то ... т.е. непрерывный расчет. Ну, это довольно простой процесс, но я хотел бы знать, есть ли у процесса компромисс производительности? Например, сможет ли клиент сделать что-то так же быстро, как поток создает массивы, я имею в виду, например, если поток выдает 100 массивов в секунду (100 м / с), получит ли клиент также 100 массивов в секунду? Можно ли сериализовать и десериализовать объект в режиме реального времени? было бы приятно, если бы кто-нибудь мог мне это объяснить.

хорошо, конечно, игнорируем ненадежную производительность tcp.

Спасибо !!

Ответы [ 3 ]

1 голос
/ 27 ноября 2009

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

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

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

0 голосов
/ 27 ноября 2009

В этом сценарии стоимость сериализации эффективно добавляется к времени, затраченному сервером на генерацию массива, а стоимость десериализации добавляется ко времени, затрачиваемому клиентом на обработку массива.

Если:

  • TG - время, используемое сервером для генерации одного массива;
  • TS - время, необходимое для сериализации одного массива;
  • TU - время, необходимое для десериализации одного массива; и
  • TP - это время, используемое клиентом для обработки одного массива.

(время в секундах)

Тогда, если TP + TU < TG + TS, процесс будет ограничен скоростью сервера, и вы сможете обрабатывать до 1 / (TG + TS) массивов в секунду. Если это больше 100, тогда вы можете достичь своей цели.

С другой стороны, если TP + TU > TG + TS, то процесс будет ограничен скоростью клиента, и вы сможете обрабатывать до 1 / (TP + TU) массивов в секунду.

0 голосов
/ 26 ноября 2009

В режиме реального времени вы хотите сказать «одновременно»? Если да, продолжайте посылать элементы массива по мере их создания. Но это поможет, только если время потрачено на кал. каждый элемент массива значителен.

Если вы не хотите сказать, одновременно, ИМХО, это не должно быть большой задержкой при сериализации / десериализации.

...