gpt4 book ai didi

java - 在 Java 中可以实现的当前最低 TCP 延迟是多少?

转载 作者:可可西里 更新时间:2023-11-01 02:40:53 24 4
gpt4 key购买 nike

我们目前正在为处理 20 个同时连接的高性能 TCP 服务器使用多线程解决方案。我们的平均延迟大约为 每条消息 200 微秒,并且我们一直在努力控制可能产生 1ms+ 异常值 的 GC Activity 。 低延迟是我们对该服务器的最高目标,我们知道我们当前的数字很糟糕。我们正在评估单线程方法,因此我们可以让所有这 20 个连接由一个线程处理。

Java 中 TCP 延迟的当前下限是多少,换句话说,两台机器在 10Gb 网络上通过 TCP 套接字交换 Java 消息的速度有多快?

最佳答案

多线程服务器不是解决延迟的方法,200 微确实太高了。对于超低延迟网络应用程序,必须使用单线程、异步、非阻塞网络库。您可以在同一个 react 器线程(即网络选择器)中轻松处理这 20 个套接字连接,这些线程可以固定到专用且隔离的 cpu 内核。此外,如果使用 Java,则必须使用留下零垃圾的网络库,因为清理 GC Activity 很可能会阻塞关键 react 器线程,从而引入您观察到的不良异常值。

为了让您了解 TCP 延迟,您可以查看 these benchmarks使用 CoralReactor ,这是一个用 Java 实现的超低延迟无垃圾网络库。

Messages: 1,000,000 (size 256 bytes)
Avg Time: 2.15 micros
Min Time: 1.976 micros
Max Time: 64.432 micros
Garbage created: zero
75% = [avg: 2.12 micros, max: 2.17 micros]
90% = [avg: 2.131 micros, max: 2.204 micros]
99% = [avg: 2.142 micros, max: 2.679 micros]
99.9% = [avg: 2.147 micros, max: 3.022 micros]
99.99% = [avg: 2.149 micros, max: 5.604 micros]
99.999% = [avg: 2.149 micros, max: 7.072 micros]

请记住,2.15 微秒超过环回,因此我不考虑网络和操作系统/内核延迟。对于 10Gb 网络,256 字节大小消息的在线延迟从 NIC 到 NIC 至少为 382 纳秒。如果您使用的是支持内核旁路的网卡(即 SolarFlare 的 OpenOnLoad),那么操作系统/内核延迟应该非常低。

免责声明:我是 CoralReactor 的开发者之一。

关于java - 在 Java 中可以实现的当前最低 TCP 延迟是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com