gpt4 book ai didi

java - Quarkus 响应式(Reactive) vs quarkus 命令式有关系吗?

转载 作者:行者123 更新时间:2023-12-02 18:03:55 30 4
gpt4 key购买 nike

您好,我正在阅读以下文章 Quarkus reactive architecture

文章开头是这样写的

Quarkus is reactive. It’s even more than this: Quarkus unifies reactive and imperative programming. You don’t even have to choose: you can implement reactive components and imperative components then combine them inside the very same application.

文章正中下方

Thanks to hints in your code (such as the @Blocking and @NonBlocking annotations), Quarkus extensions can decide when the application logic is blocking or non-blocking.

我的问题是我写响应式(Reactive)还是命令式有关系吗?例如

响应式(Reactive)方法

    @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();
}

这两个代码片段运行时会产生相同的 react 性好处吗?

最佳答案

假设您的第二个代码段使用经典的阻塞式 Hibernate ORM,它不会像第一个代码段(似乎使用 Hibernate Reactive)一样工作。它包含一个阻塞调用,所以你会阻塞事件循环,这是你在非阻塞架构中可以做的最糟糕的事情,因为它基本上与非阻塞架构可以给你的所有好处相抵触(见 https://vertx.io/docs/vertx-core/java/#golden_rule ) .

如果您的方法是阻塞的,包括调用其他阻塞的库,您不得假装它们是@NonBlocking。如果删除 @NonBlocking 注释,方法调用将被卸载到线程池,事件循环保持空闲以处理其他请求。这有一些开销,加上线程池不是无限的,但我敢说它在绝大多数情况下都能正常工作。

关于java - Quarkus 响应式(Reactive) vs quarkus 命令式有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73726775/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com