【发布时间】:2011-08-22 01:12:49
【问题描述】:
我们一直在分析和分析我们的应用程序,以尽可能减少延迟。我们的应用程序由 3 个独立的 Java 进程组成,它们都运行在同一台服务器上,它们通过 TCP/IP 套接字相互传递消息。
我们已将第一个组件的处理时间减少到 25 μs,但我们看到 TCP/IP 套接字写入(在 localhost 上)到下一个组件总是需要大约 50 μs。我们看到了另一种异常行为,即接受连接的组件可以更快地写入(即
不是 TCP/IP 专家,我不知道可以做些什么来加快速度。 Unix 域套接字会更快吗?内存映射文件?还有哪些其他机制可能是将数据从一个 Java 进程传递到另一个进程的更快方法?
2011 年 6 月 21 日更新 我们创建了 2 个基准测试应用程序,一个在 Java 中,一个在 C++ 中,以更严格地对 TCP/IP 进行基准测试并进行比较。 Java 应用使用 NIO(阻塞模式),而 C++ 使用 Boost ASIO tcp 库。结果或多或少相当,C++ 应用程序比 Java 快约 4 μs(但在其中一项测试中,Java 击败了 C++)。此外,两个版本都显示每条消息的时间存在很大差异。
我认为我们同意共享内存实现将是最快的基本结论。 (尽管我们也想评估 Informatica 产品,只要它符合预算。)
【问题讨论】:
-
微秒的 SI 简写是 μs,而不是 μ(数量和单位之间应该有空格)。我帮你修好了。
-
我也不是专家,我会冒险猜测 UDP 可能会降低您的延迟,因为它是一种更轻量级的协议。当然,如果您的应用程序必须手动实现与 TCP 开箱即用相同的可靠性保证,那么编程起来会更加痛苦,并且可能不会产生任何好处。
-
stdin/stdout/stderr 怎么样(例如,第一个进程启动另外 2 个,并且通信只发生在这个“主”和 2 个从属之间)?这是一个选项吗?
-
这三个进程不能共享同一个JVM有什么原因吗?
-
@Marcelo:谢谢!对于更好的语法和句法的指针总是很感激!
标签: java ipc tcp interprocess low-latency