当前位置: 首页 > 知识库问答 >
问题:

webflux netty(带或不带超线程)

施权
2023-03-14

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

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

共有1个答案

闾丘正志
2023-03-14

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

话虽如此,在这种情况下,它会妨碍而不是提高性能,对此我并不太惊讶。超线程不会给你的处理器更多的实际处理能力,它只是使内核中未使用的部分能够在另一个线程上同时使用。如果你的事件循环只是不断地做同样的工作,因此可能不会有太大的不同(因为每个线程都使用相同的内核部分)——正如你所指出的,由于更多的工作线程会增加上下文切换开销,因此有可能影响性能。

如果你有一个应用程序,可以对收到的每个请求进行有意义的不同工作 - 这可能是一个不同的故事,因此总是对你的特定情况进行基准测试以确保。

 类似资料:
  • 问题内容: 是为了什么? 之间有什么区别? 和 问题答案: 使该变量可用于子流程。 那是, 表示变量名称可用于您从该Shell进程运行的 任何 进程。如果您希望进程使用此变量,请使用,然后从该Shell运行该进程。 表示变量作用域仅限于外壳程序,不适用于任何其他进程。您可以将其用于(例如)循环变量,临时变量等。 重要的是要注意,导出变量不会使其对父进程可用。也就是说,在生成的进程中指定和导出变量不

  • 我想在我的sql-server数据库中插入。txt文件数据。我在.txt文件中使用和不使用PK-Variable时都出现了错误。我的疑问: 使用 从“C:\user\test.txt”大容量插入db.schema.table(FIELDTERMINATOR=';')去吧 null null

  • 问题内容: 我还没有找到任何官方文档。但是afaik,是否在没有括号的情况下使用我们的类实例化没有关系-只要不涉及参数,对吗? 要么 但是谁能告诉我性能是否有所不同?“更正确”的方法是哪一种?有任何官方文件吗? 问题答案: 性能上的任何差异将绝对可以忽略。 虽然这两种方式都很好,我个人更喜欢使用 ,因为通常情况下,一个方法 是 正在这里所说的,和PHP函数/方法调用时需要。而且,它与带有参数的实例

  • 以下两者之间的区别是什么: 和 ? 我认为它与导出默认标题有某种联系 和

  • 我试图在没有xml/yaml文件的情况下使用Spring Boot运行Hazelcast客户端应用程序,但我找不到通过Spring管理我的Hazelcast实例的方法。这是我的代码: 当我尝试将hazelcast实例自动关联到主类时,我得到 主要类别代码:

  • 我很好奇这样做的正确方式。假设我想从一个方法中发出成功或失败的信号。如果在成功的情况下我没有什么想说的,除了它成功了,这是可以接受的吗? 那么,从这个方法返回Right()的正确方法是什么呢?显然,仅仅返回Right()就给出了一个弃用警告(通过插入()来调整参数列表的做法已被弃用)。 我也可能做Option[抛弃],但这不符合我阅读Option的精神。或者返回scala的结果。util。尝试并评