webflux netty,带或不带超读

webflux netty,带或不带超读,netty,spring-webflux,Netty,Spring Webflux,我用反应式mongo创建了简单的Webflux(kotlin)应用程序。控制器有一个GET方法,即返回流(一个集合中有两个对象)。 我使用了Apache基准测试,我注意到一件事: 我有i7 10700(8+8核)。如果我设置System.setProperty(“reactor.netty.ioWorkerCount”,“8”),性能会提高。对于16个netty nio线程,AB显示每秒约4800个请求,一个请求时间约为7-9毫秒。对于8个netty nio线程,AB显示每秒约5500个请求,每

我用反应式mongo创建了简单的Webflux(kotlin)应用程序。控制器有一个GET方法,即返回流(一个集合中有两个对象)。 我使用了Apache基准测试,我注意到一件事: 我有i7 10700(8+8核)。如果我设置System.setProperty(“reactor.netty.ioWorkerCount”,“8”),性能会提高。对于16个netty nio线程,AB显示每秒约4800个请求,一个请求时间约为7-9毫秒。对于8个netty nio线程,AB显示每秒约5500个请求,每个请求3-5毫秒


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

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

话虽如此,我并不感到意外,在这种情况下,它阻碍而不是帮助性能。超线程不会给处理器更多的实际处理能力,它只会让内核中未使用的部分同时在另一个线程上使用。如果您的事件循环只是不断地执行相同的工作,那么它可能不会有太大的区别(因为每个线程都使用相同的核心部分)——而且正如您所注意到的,由于更多工作线程会增加上下文切换开销,因此有可能会影响性能


如果您有一个应用程序,该应用程序可以对收到的每个请求执行有意义的不同工作,那么这可能是一个不同的故事,因此始终对您的具体案例进行基准测试以确保这一点是有意义的。

非常感谢您!