我用反应性蒙戈创建了简单的Webflux (kotlin)应用程序。控制器有一个GET方法,即返回流(来自一个集合的2个对象)。我使用了,我注意到了一件事:我有i7 10700 (8+8内核)。如果我将System.setProperty("reactor.netty.ioWorkerCount",设置为"8"),则性能会提高。对于16个netty-nio线程,AB显示每秒4800个请求,一个请求时间约为7-9ms。对于8个netty-nio线程,AB显示每秒约5500个请求,每个请求显示3-5 ms .
它是否值得在未来的实际项目中只使用物理核心?超线程在其他情况下有优势吗?
发布于 2021-03-07 09:03:21
超线程和线程计数是一件很微妙的事情,通常很难在给定的环境中进行推理。因此,与其采取全面的规则来打开或关闭它,它总是值得基准你的具体设置,看看什么是最有效的IMHO。
尽管如此,在这种情况下,我并不感到意外,因为它阻碍了性能,而不是提高了性能。超线程不会给处理器更多真正的处理能力,它只会让未使用的核心部分同时在另一个线程上使用。如果您的事件循环只是在不停地做相同的工作,那么它很可能不会产生很大的差别(因为每个线程都使用相同的内核部分)--而且正如您注意到的,由于更多的工作线程会增加上下文切换开销,所以有可能会影响性能。
但是,如果您有一个应用程序可以对传入的每个请求进行有意义的不同工作,那么这可能是一个不同的故事,因此总是对您的具体情况进行基准测试以确保这一点。
https://stackoverflow.com/questions/66512566
复制相似问题