【问题标题】:Assigning a core to TCP polling将核心分配给 TCP 轮询
【发布时间】:2012-11-20 16:24:07
【问题描述】:

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

【问题讨论】:

    标签: java tcp cpu-cores


    【解决方案1】:

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

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

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

    一旦您获得了本机线程 ID,您应该使用“taskset”命令行实用程序来更改亲和性。你可以在另一个帖子中找到说明how to use taskset

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        相关资源
        最近更新 更多