我需要制作低延迟服务器,这里的原始数据吞吐量不像处理数千个同时连接的能力那么重要。我不知道该用什么语言。Java更简单,开发速度更快,所有我需要的东西都有很好的接口+良好的网络支持(JAVA和选择器类)。但是实际上,除了编程之外,我对java没有太多的经验,所以即使我今天读到的东西比本地C/C++慢,仍然对性能有一些怀疑,因为c/c++编译成二进制代码,但是java .class文件是被解释的,所以在这种转换中肯定会有开销。
编辑: App将是支持网络应用程序实时(如聊天等)的服务器。
发布于 2012-08-29 09:21:45
通常人们想要一个低延迟的应用程序,所以我不知道你所说的低延迟是什么意思。
因此,即使我读到的东西,比如java,今天并不比原生C/C++慢
它仍然稍慢,只是不足以解决大部分时间的问题。
例如,无论使用哪种语言,网络IO都是网络IO。这种语言不会使你的网络更快或更慢,除非是在最极端的低延迟情况下。
,因为c/c++被编译成二进制代码,但是java .class文件被解释,
Java在运行时被编译成本机代码,因此这两个系统最终都运行本机代码。
所以翻译一定有开销。
启动时会有开销。但是,一旦应用程序运行,影响就小得多。
有人编写了高延迟应用程序吗?
如果你的网络有很高的延迟,你的语言就不太重要了。
您的意思是在这种应用程序中使用更好吗?
我建议你用你最熟悉的语言。
App将成为支持web应用程序实时应用的服务器。
在这种情况下,如果您对网络延迟进行了适当的编码,则可能会比应用程序的延迟要高得多。
为了给你一个广泛的想法,一个典型的互联网连接有5-20毫秒的延迟.一个典型的用户只能以50 ms的延迟做出反应。延迟20-50 ms的服务器几乎可以用任何语言编写。一个延迟200-500微秒的服务器可以用Java或C++编写.如果您想要少于100微秒,包括对客户端的延迟,您将看到专门的硬件和一些核心引擎的C++代码。在这种情况下,服务器和消费者可能在同一栋楼中,如果不是同一机架。
发布于 2012-08-29 09:23:12
大多数JVM实现都使用及时(JIT)编译技术,因此它们几乎可以与提前编译的程序(在C++或Ocaml中)一样高效。
下面是Linux的观点。
JVM通常会将您的.class字节码文件的热点转换为机器代码(递增地和一次)。
您可以考虑使用其他语言,如Ocaml ( web部件使用奥西根 )或Opa
当然,您可以用C(或C++)重写应用程序中非常关键的部分,并从Java (或Ocaml或其他语言)代码中调用它。
您可以在运行时生成适合实际web作业的机器代码。查看阿斯吉特或GNU闪电。您可以生成C代码(在运行时,如比斯蒙 -described in 这草稿报告,由战车 - as资助),然后将其编译为插件,dlopen(3)和dlsym(3) it。也见这的答案。运行时C代码生成器的一个更简单的例子是我的manydl.c (用于Linux)。
您可以考虑在普通Lisp中使用SBCL编写web应用程序。https://common-lisp.net/中有许多可用的库--包括与web相关的库。
您可以使用guile或Python对服务器进行编码。您可以很容易地找到插件或扩展加速web服务。
当然,观察到的延迟取决于硬件。在廉价的RaspberryPi上和在top500.Org上上市的高端超级计算机上,情况就不一样了。
https://stackoverflow.com/questions/12174571
复制相似问题