“客户端 - 服务器”性能问题

时间:2011-10-24 16:24:10

标签: java performance client

我有一个排队论"以下问题:

  • 开发一个CLIENT,以固定速率向SERVER发送固定大小的连续数据包
  • SERVER必须对这些数据包进行排队并在处理这些数据包之前对它们进行排序
  • 然后我们需要证明(对于某些数据包大小' n'字节和速率' MBps)排序(n log n)的理论观察/ CPU_FREQ)发生得比排队(n / r)更快,因此QUEUE根本不会累积。

然而,我发现Queue总是在建立(在两个系统上运行 - 客户端和服务器PC /笔记本电脑),

注意:当我在同一系统上运行进程时,Queue不会构建,并且大部分时间都是接近1到20个数据包。

需要有人检查/查看我的代码。

代码粘贴在此处:

  1. 客户(单班):

  2. 服务器(多个类文件包: serverClasses

  3. " QUEUE_LEN的样本图表。 #PACKETS"对于10MBps和10000字节大小的数据包,持续时间为30 - 35秒

  4. enter image description here

1 个答案:

答案 0 :(得分:2)

在客户端上,它看起来我timeinterval总是会是0.这是内涵吗?你在代码中说秒,但你错过了* 1000

timeInterval = 1 / ( noOfPacketsToBeSent );

然后你拨打Thread.sleep((long) timeinterval)。由于sleep()需要long,所以这最多只能睡1ms而且通常(我怀疑)睡眠0ms。睡眠只有毫秒级的分辨率。如果你想要纳秒分辨率,你就必须做类似的事情:

   TimeUnit timeUnit = TimeUnit.NANOSECONDS;
   ...
   timeUnit.sleep(50);  

我怀疑当客户端和服务器都在同一个盒子上时,你的CPU限制了你的运行。当它们位于不同的盒子上时,由于睡眠时间不当,客户端实际上充斥着服务器,所以事情会备份。

这至少是我最好的猜测。