【问题标题】:webflux netty with or without hyperthreading带或不带超线程的 webflux netty
【发布时间】:2021-06-05 07:34:54
【问题描述】:

我使用响应式 mongo 创建了简单的 Webflux (kotlin) 应用程序。控制器有一个 GET 方法,它返回 Flow(来自一个集合的 2 个对象)。 我使用了 Apache Benchmark,我注意到一件事: 我有 i7 10700(8+8 核)。如果我设置 System.setProperty("reactor.netty.ioWorkerCount", "8"),性能会提高。使用 16 个 netty-nio 线程,AB 每秒显示约 4800 个请求,一个请求时间大约需要 7-9 毫秒。使用 8 个 netty-nio 线程,AB 显示每秒约 5500 个请求,每个请求 3-5 毫秒。

将来在实际项目中仅使用物理内核是否值得?超线程在其他情况下有优势吗?

【问题讨论】:

    标签: netty spring-webflux


    【解决方案1】:

    超线程和线程计数是一件微妙的事情,在给定的设置中通常很难推理。因此,与其采取一揽子规则来打开或关闭它,不如对您的特定设置进行基准测试,看看什么最适合恕我直言。

    话虽如此,在这种情况下,它阻碍而不是帮助性能,我并不过分惊讶。超线程不会为您的处理器提供更多真正的处理能力,它只是使核心的未使用部分能够在另一个线程上同时使用。如果您的事件循环只是不停地做同样的工作,那么它可能不会产生很大的不同(因为每个线程都使用相同的内核部分) - 正如您所注意到的,有机会由于更多工作线程会增加上下文切换开销,从而影响性能。

    如果您有一个应用程序可以对传入的每个请求执行有意义的不同工作,但情况可能会有所不同,因此始终对您的特定案例进行基准测试以确保是有意义的。

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 2022-06-05
    • 2010-10-07
    • 2023-03-19
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2020-08-05
    相关资源
    最近更新 更多