【问题标题】:Is there any technical reason why throughput would significantly differ between an Java application and a C++ application?Java 应用程序和 C++ 应用程序之间的吞吐量会显着不同,是否有任何技术原因?
【发布时间】:2011-07-27 01:26:29
【问题描述】:

给定两个应用程序,一个用 Java 编写,第二个用 C++ 编写,它们有什么不同的网络吞吐量有什么原因吗?这两个应用程序在功能上都相当简单和相同——它们只是打开一个套接字(假设是一个 UDP 套接字,为了争论)并开始写入相同的数据。

可以安全地假设两个应用程序在相同的条件下运行 - 相同的硬件、两个端点的相同操作系统、相同的网络、相同的配置设置等等。它真的和你能做到的一样。假设两者都经历了类似的优化也是安全的。

我想不出原因,但我可能忽略了一些东西,可能是 JVM 处理网络数据流量或与操作系统交互的方式。

在这一点上,这个问题主要是假设性的。应用程序不存在 - 我只是想确定是否有任何基于性能的理由来考虑一种环境而不是另一种环境。

【问题讨论】:

  • 我唯一能想到的就是底层实现是如何完成的。也许较低级别的代码可能或多或少是健壮的。一个好的检查是为两者创建一个简单的单向通信程序并执行饱和测试。
  • 不写这个作为答案,因为这个问题是专门关于吞吐量的......虽然已经在构建实时 Java 方面做出了努力,但它们似乎远远落后于普通 Java VM。因此,虽然 吞吐量 可能相当,但我知道可预测的延迟促使开发人员坚持使用 C++ 的行业。
  • @D.N.您所说的底层实现是指 JVM 使用的本机、特定于操作系统的实现吗?我想认为这些都经过了很好的优化和可靠。如果您可以提供一些有关饱和度测试的资源并将其作为答案发布,那就太好了。
  • @Thomas Owens 是的,我指的是特定于操作系统的实现。显然 C++ 代码会被编译到环境中,但有些事情告诉我 JVM 可能没有那么高度优化。我没有任何特定的饱和资源——我只是在假设。我假设您需要做的就是设置一些 UDP(或 TCP,取决于您要测试的内容)流量并通过 Wireshark 等监控程序监控吞吐量。如果您认为这是一个足够的答案,我会写下来。

标签: java c++ networking network-programming


【解决方案1】:

大多数软件不会在如此重要的网络(相对于 CPU 速度)上运行。如果您想同时为数千个客户端提供服务,您可能会发现细微差别(假设两种实现都完成了适当数量的调整工作)。

【讨论】:

  • 只是为了确保我没有看错:如果(网络速度 >> CPU 速度)或(客户端 --> 大数字),那么它可能会产生重大影响。否则,可能不会。
  • 我只是好奇。您如何比较网络速度(位/秒)和 CPU 速度(Hz)?是否有一些等式或指导将它们等同起来?
  • 例如,使用 400 MHz 左右的嵌入式处理器的千兆网络,或使用 Intel Atom 的 10 千兆网络。正是这种差异让我开始挖掘。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多