你好,我正在读下面这篇文章Quarkus reactive architecture

这篇文章的开头说

quarkus 是react 性的.更重要的是:Quarkus统一了react 式编程和命令式编程.您甚至不必 Select :您可以实现react 性组件和命令性组件,然后将它们组合到同一个应用程序中.

就在中间下方,文章提到

多亏了代码中的提示(如@阻塞和@非阻塞注释),Quarkus扩展可以决定应用程序逻辑何时为阻塞或非阻塞.

我的问题是,我写的是被动的还是命令式的,这重要吗?例如

react 式方法

    @GET
    public Uni<List<Fruit>> get() {
        return sf.withTransaction((s,t) -> s
                .createNamedQuery("Fruits.findAll", Fruit.class)
                .getResultList()
        );
    }

命令式方法

    @GET
    @NonBlocking
    public List<Fruit> get() {
        return entityManager.createNamedQuery("Fruits.findAll", Fruit.class)
                .getResultList();
    }

这两个代码片段会带来相同的被动yield 吗?

推荐答案

假设您的第二个代码段使用classic 的阻塞Hibernate ORM,它将像第一个代码段一样工作(似乎使用Hibernatereact 式).它包含阻塞调用,因此您将阻塞事件循环,这是在非阻塞体系 struct 中所能做的最糟糕的事情,因为它基本上与非阻塞体系 struct 可以给您带来的所有好处相抵触(参见https://vertx.io/docs/vertx-core/java/#golden_rule).

如果您的方法是阻塞的,其中包括对正在阻塞的其他库的调用,则must not假装它们是@NonBlocking.如果删除@NonBlocking注释,方法调用将被卸载到线程池,并且事件循环可以自由处理其他请求.这有一些开销,再加上线程池不是无限的,但我敢说它在绝大多数情况下都能很好地工作.

Java相关问答推荐

最小拓Flutter 排序的时间复杂度是多少?

JUnit—如何模拟局部变量对象方法调用

CAMEL 4中的SAXParseException

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

';com.itextpdf.ext.html.WebColors已弃用

为什么我的在一个范围内寻找素数的程序不能像S所期望的那样工作

如何使用值中包含与号的查询参数创建一个java.net.URI

具有阻塞方法的开源库是否应该为执行提供异步选项?

无法使用ApacheSpark依赖项构建JavaFX应用程序

在Spring终结点中,是否可以同时以大写和小写形式指定枚举常量?

如何在我的世界中为互动增加冷却时间?

如何在JUNIT测试中覆盖ExecutorService?

Java创建带有扩展通配符的抽象处理器

Android应用程序为错误的显示类型 Select 尺寸文件

如何在EL处理器中定义带有命名空间的变量?

整数->;双取消框,但双->;int不';t开箱.为什么?

在数组中查找素数时出现逻辑错误

ExecutorService:如果我向Executor提交了太多任务,会发生什么?

如何在Java上为循环数组从synchronized迁移到ReentrantLock

睡眠在 Spring Boot 中