相关疑难解决方法(0)

当繁忙的 Java 线程绑定到物理核心时,是否会因为到达代码中的新分支而发生上下文切换?

我对低延迟代码感兴趣,这就是我尝试配置线程关联的原因。特别是,它应该有助于避免上下文切换。

我已经使用https://github.com/OpenHFT/Java-Thread-Affinity配置了线程关联。我运行非常简单的测试代码,它只是循环检查时间条件。

    long now = start;
    while (true)
    {
        if (now < start + TimeUtils.NANOS_IN_SECOND * delay)
        {
            now = TimeUtils.now();
        }
        else
        {
            // Will be printed after 30 sec
            if (TimeUtils.now() > start + TimeUtils.NANOS_IN_SECOND * (delay + 30))
            {
                final long finalNow = now;
                System.out.println("Time is over at " +
                        TimeUtils.toInstant(finalNow) + " now: " +
                        TimeUtils.toInstant(TimeUtils.now()));
                System.exit(0);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

因此,在指定的延迟执行后转到“else”并且大约在同一时间我看到上下文切换。这是预期的行为吗?造成这种情况的具体原因是什么?在这种情况下如何避免上下文切换?

测试详情

我从这个 repo 构建 shadowJar:https : //github.com/stepan2271/thread-affinity-example。然后我使用以下命令运行它(可以在这里玩数字,当延迟 > 60 时它对测试没有显着影响):

taskset …
Run Code Online (Sandbox Code Playgroud)

java performance multithreading jvm low-latency

18
推荐指数
1
解决办法
1059
查看次数

标签 统计

java ×1

jvm ×1

low-latency ×1

multithreading ×1

performance ×1