7

我需要制作低延迟服务器,其中原始数据吞吐量不如处理数千个同时连接的能力重要。我不知道用什么语言。Java 更简单,开发速度更快,界面美观,满足我的所有需求 + 对网络的良好支持(JAVA NIO 和选择器类)。但实际上我除了编程之外对java没有太多经验,所以即使我读到java之类的东西今天并不比native C/C++慢,仍然对性能有一些疑问,因为c/c++是编译成二进制代码的,但是 java .class 文件被解释,所以在翻译中必须有开销。

  • 有人可以发表一下自己的经历吗?
  • 有人编写了低延迟应用程序吗?
  • 你的意思是更好地用于那种类型的应用程序?

编辑:应用程序将成为服务器以支持实时网络应用程序(如聊天等)

4

2 回答 2

19

通常人们想要一个低延迟的应用程序,所以我不知道你所说的低延迟是什么意思。

所以即使我读到像java这样的东西今天也不会比原生C/C++慢

它仍然稍微慢一些,只是在大多数情况下还不够重要。

例如,无论您使用哪种语言,网络 IO 都是网络 IO。例如,该语言不会使您的网络更快或更慢,除非在最极端的低延迟情况下。

,因为c/c++被编译成二进制代码,但是java .class文件被解释,

Java 在运行时被编译为本机代码,因此两个系统最终都运行本机代码。

所以翻译中必须有开销。

启动时有开销。但是一旦应用程序运行起来,影响就小得多了。

有人编写了高延迟应用程序吗?

如果您的网络具有高延迟,那么您的语言就不太重要。

你的意思是更好地用于那种类型的应用程序?

我建议您使用您最熟悉的语言。

应用程序将成为服务器以支持实时网络应用程序

在这种情况下,如果您正确编码,您的网络延迟可能会远高于应用程序的延迟。


为您提供一个广泛的概念,典型的互联网连接有 5 到 20 毫秒的延迟。典型用户只能以 50 毫秒的延迟做出反应。几乎可以用任何语言编写延迟为 20 - 50 毫秒的服务器。延迟为 200 - 500 微秒的服务器可以用 Java 或 C++ 编写。如果您想要少于 100 微秒,包括到客户端的延迟,您正在为您的核心引擎寻找专业硬件和一些 C++ 代码。在这种情况下,服务器和消费者可能会在同一建筑物中,即使不是同一个机架。

于 2012-08-29T09:21:45.120 回答
1

大多数 JVM 实现都使用即时 (JIT)编译技术,因此它们几乎可以与提前编译的程序(在 C++ 或 Ocaml 中)一样高效。

我在下面采取 Linux 的观点。

.classJVM 通常会将您的字节码文件的热点转换为机器代码(增量地,一次地) 。

您可以考虑使用其他语言,例如 Ocaml(使用Ocsigen作为 Web 部件)或Opa

当然,您总是可以用 C(或 C++)重写应用程序的非常关键的部分,并从 Java(或 Ocaml,或其他语言)代码中调用它。

您可以在运行时生成针对实际 Web 作业量身定制的机器代码。查看asmjitGNU Lightning。您可以生成 C 代码(在运行时,如Bismon - 在报告草案中描述并由CHARIOT资助- 确实)然后将其编译为插件dlopen(3)dlsym(3)它。另请参阅答案。运行时 C 代码生成器的一个更简单的示例是我的manydl.c(适用于 Linux)。

您可以考虑使用 HTTP 服务器库,例如libonionPOCOWt

您可以考虑使用SBCL在Common Lisp中编写您的 Web 应用程序。https://common-lisp.net/提供了许多库- 包括与 Web 相关的库。

您可以使用GNU guilePython对您的服务器进行编码。您可以轻松找到加速 Web 服务的插件或扩展。

当然,观察到的延迟取决于您的硬件。在廉价的RaspberryPi和在top500.Org上列出的高端超级计算机上,情况会有所不同

于 2012-08-29T09:23:12.063 回答