0

我们目前使用的是旧版本的 Quarkus,所以我想了解影响并考虑是否应该升级到最新版本。

我了解到,自 2.2 版以来,Quarkus 将根据方法返回类型(https://quarkus.io/blog/resteasy-reactive-smart-dispatch/#new-world-new-rulesI/O thread )运行方法,这意味着阻塞/ //同步方法不返回,会自动卸载到工作线程,不会阻塞I/O线程。Worker threadUniMultiCompletionStage

在我们当前使用旧版 Quarkus 和 RESTEasy Reactive(我认为是 1.12.2)的实现中,对于所有not返回的方法Uni//我相信它们将在 I/O 线程上被调用,因为我们没有在它们上使用Multi它们。这些方法包括调用外部 API、访问数据库和访问文件等操作,所以我认为我们应该有责任通过使用响应式库以非阻塞/异步方式执行这些操作,否则它们会阻塞 I/ O 线程(鉴于并非我提到的所有这些方法当前都是使用响应式库实现的)。但是升级到最新版本将解决这个问题,因为这些方法将被卸载到工作线程,我正确吗?CompletionStage@Blocking

PS:通过阅读 Quarkus 文档,我了解到最少的 I/O 线程可以处理许多并发请求。我很好奇默认情况下有多少个 I/O 线程,这是可配置的吗?谢谢!

4

1 回答 1

1

您正确地假设在 Quarkus 2.2 之前,RESTEasy Reactive 的默认设置是在事件循环上处理所有方法的请求,但使用时除外@Blocking。不用说,这意味着您不需要在这些方法中执行任何阻塞 IO(或为此进行任何长时间运行的操作)。

Quarkus 使用 2*number_of_cpu_threads 作为它创建的默认事件循环线程数

于 2021-10-01T05:22:55.930 回答