对象序列化性能

时间:2009-11-26 20:23:02

标签: multithreading serialization tcp

假设我有一个简单的tcp服务器在线程内部生成一个数组,将其序列化并通过tcp连接将其发送到客户端,当它到达客户端时,客户端反序列化它并执行某些操作...即。连续计算。那么这是一个非常直接的过程,但我想知道这个过程是否有任何性能权衡?例如,客户端可以像线程生成数组一样快地执行某些操作,我的意思是,例如,如果线程在一秒内生成100个数组(100 m / s),客户端是否会在一秒钟内获得100个数组?可以将对象实时序列化和反序列化吗?如果有人能向我解释,我会很高兴。

当然要忽略不可靠的tcp性能。

谢谢!

3 个答案:

答案 0 :(得分:1)

实时可能不是在这里使用的正确术语,除非你在谈论硬截止日期,我在这种情况下看不太可能,因为我们在步骤之间讨论3 ..序列化,通过网络发送和反序列化。

没有真正的方法可以准确预测会发生什么。如果我们把网络延迟拿出来,剩下的就取决于接收机的速度。如果它忙或功率低于发送机器,它可能不会像发送方机器发送的那样处理。

这里真正的问题是在CPU时间方面序列化和反序列化的成本..从我的理解,反序列化是一个更昂贵的操作。所以我的猜测是接收器很难保持,所以你可能想在发送另一个包之前发回一个确认。

答案 1 :(得分:0)

实时,你的意思是说“同时”吗?如果是,则在生成数组成员时继续发送它们。但这只有在需要时间才能得到帮助。每个数组元素都相当可观。

如果你不想同时说恕我直言,那序列化/反序列化的时间不应该太长。

答案 2 :(得分:0)

在这种情况下,序列化成本有效地添加到服务器生成阵列所花费的时间,并且反序列化成本被添加到客户端处理阵列所花费的时间。

如果:

  • TG是服务器用于生成一个数组的时间;
  • TS是序列化一个数组所需的时间;
  • TU是将一个数组反序列化所需的时间;和
  • TP是客户端处理一个数组所用的时间。

(所有时间都以秒为单位)

然后,如果TP + TU < TG + TS,该过程将受到服务器速度的限制,您将能够每秒处理最多1 / (TG + TS)个数组。如果大于100,则可以达到目标。

另一方面,如果TP + TU > TG + TS,则该过程将受到客户端速度的限制,并且您每秒最多可以处理1 / (TP + TU)个数组。