【问题标题】:Byte Allocation Affecting the file transfer in JAVA NIOJAVA NIO中影响文件传输的字节分配
【发布时间】:2016-06-01 03:59:33
【问题描述】:

我有一个 7Gig 文件要在 2 个场景中使用 JAVA NIO 发送:

  • 首先是客户端发送文件,我将缓冲区分配为 500MB,速度很快,只需 30 秒

  • 其次是服务器将是一个发送文件的服务器,我仍然使用 500MB 作为我的缓冲区,但我花了将近 30 分钟来发送文件,但是当我减少缓冲区分配时它改善了性能直到我到达 1MB 缓冲区分配并且我花了 1 分钟发送文件。

但是在第一种情况下,我也降低了它,但它只是降低了发送文件的性能。

谁能解释一下为什么会这样?

【问题讨论】:

  • 什么是服务器?什么是客户端?在哪里?读/写字节源代码?我们需要更多细节。
  • 如果您通过 TCP 套接字发送,任何超过 1MB 的缓冲区大小都是过度杀伤力。发布一些代码:两种情况下的发送和接收代码。
  • 矫枉过正是什么意思?

标签: java byte buffer nio filechannel


【解决方案1】:

从发布的信息来看,可能是 TCP 的拥塞避免/Nagle 在服务器端起作用。 要检查对速度的影响,请遵循每种方法并注意每个步骤的差异。

  1. 通过 TCP_NO_DELAY 禁用 Nagle
  2. 使用分散,聚集。

两者的例子都可以在这里找到:http://bedrin.livejournal.com/207032.html

【讨论】:

  • 不会考虑 30::1 的差异,也不会考虑任何事情,除非他在发送之间有莫名其妙的大差距。分散/聚集 I/O 与 Nagle 算法或传输文件没有任何关系。您链接中的代码无效。
  • 公平的顶级点,包括代码在内的问题的更多信息将导致更好地了解为什么 60 倍差异或 2 倍的较小文件。 Scatter Gather IO 将帮助 NIO 有效地使用服务器的核心,对吗?
  • 从什么分散收集?这是一个文件。只有一种数据来源。
  • 为什么分散收集对单个文件没有帮助?
猜你喜欢
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多