"客户端 - 服务器"性能问题

Adi*_*369 9 java performance client

我有一个"排队论"问题,需要完成以下工作:

  • 开发CLIENT以固定速率向SERVER发送固定大小的连续数据包
  • SERVER必须在处理这些数据包之前对这些数据包进行排队并对其进行排序
  • 然后我们需要证明(对于一些数据包大小'n'字节和速率' r'MBps)理论上观察到排序(n log n/CPU_FREQ)发生得比排队(n/r)更快,因此QUEUE不应该构建完全没有.

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

注意:当我在同一系统上运行进程时,Queue不会构建,并且大多数情况下,它接近1到20个数据包.

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

代码粘贴在这里:

  1. 客户(单班):

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

  3. 针对10MBps和10000字节大小的数据包的"QUEUE_LEN Vs. #PACKETS"示例图表,持续时间为30 - 35秒

在此输入图像描述

Gra*_*ray 2

在我看来,在客户端上timeinterval总是 0。这是意图吗?您在代码中说了秒,但缺少* 1000.

timeInterval = 1 / ( noOfPacketsToBeSent );
Run Code Online (Sandbox Code Playgroud)

然后你打电话Thread.sleep((long) timeinterval)。既然sleep()采取了long,那么这最多会休眠 1 毫秒,通常(我怀疑)休眠 0 毫秒。睡眠只有毫秒的分辨率。如果您想要纳秒分辨率,那么您必须执行以下操作:

   TimeUnit timeUnit = TimeUnit.NANOSECONDS;
   ...
   timeUnit.sleep(50);  
Run Code Online (Sandbox Code Playgroud)

我怀疑当客户端和服务器都在同一台机器上时,您的 CPU 会限制您的运行。当它们位于不同的盒子上时,事情就会备份,因为客户端实际上由于不正确的睡眠时间而淹没了服务器。

至少这是我最好的猜测。