0

我们有几个 Java 应用程序在同一台 Linux 机器上运行,并通过 TCP 来回发送消息。我们使用 ServerSocket 和 Socket 来创建连接。我想尽可能地减少这种通信的延迟。似乎可以在我们的盒子上分配一个核心来进行连续的 TCP 轮询,这将提高性能。在 Linux 和/或 Java 中是如何做到的?

4

2 回答 2

0

有一种方法可以实现这一点,但它不是可移植的。

您需要做的是:1)找出本机线程ID 2)为本机线程设置亲和力

您可以使用 sun.jvm.hotspot 下的包中不受支持的类来获取本机线程 ID(在 linux 上是进程 ID)。您可以通过包含 sa-jdi.jar(与 jdk 捆绑)来链接这些类以构建路径。由于我不喜欢从另一个站点复制答案,你应该去阅读github 上的说明

获得本机线程 ID 后,您应该使用“taskset”命令行实用程序来更改亲和性。您可以从另一篇文章中找到如何使用任务集的说明

于 2012-11-20T23:40:19.677 回答
0

它不是。在 Java 中无法将线程分配给核心。

并且分配单个核心不会提高性能;相反,它可能会减少它。我不知道你所说的“轮询”是什么意思,但你不能用套接字来做到这一点:你必须在 read() 中使用单独的线程阻塞。如果您正在考虑使用InputStream.available(),那么您完全是在寻找错误的树,应该将 NIO 与 Selector 一起使用。

于 2012-11-20T21:49:13.043 回答