gpt4 book ai didi

java - 为什么不对 JAX-RS 中的所有资源使用异步响应?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:14 26 4
gpt4 key购买 nike

我正在梳理 JAX-RS 规范。一切似乎都很简单。但我留下了问题。为什么我不在任何地方都这样做?换句话说,缺点是什么?由于大多数资源请求最终都会到达数据库,您不希望所有资源请求都是异步的吗?

我应该注意哪些缺点?有一堆额外的开销吗?我一直没能找到任何说明为什么你不应该这样做,只是如何做到这一点。

最佳答案

我认为这不是关于 JAX-RSAsync 特性,而是关于 synchronousasynchronous操作。

如您所知,同步操作使用单个线程来执行任务,而异步操作需要创建额外的线程 执行任务。现在,这是开销 - 创建一个新的 thread,在新的 thread 中执行任务,然后销毁那个 thread。这种开销会影响性能。

不过,您可以重用已经创建的threads,而不是总是创建新的thread。但是,仍然存在影响性能的额外线程。

例如,处理大约 1000 个并行请求同步网络服务。因此,为了处理这些请求,将创建​​ 1000 个线程。现在,考虑 asynchronous 环境中的相同情况。为了处理 1000 个并行请求,将创建​​ 2000 个线程 - 1000 个用于处理请求,1000 个用于异步 操作处理.

现在,您可以了解操作系统的负载。高负载会影响性能。如果任务代价高昂,即需要时间来执行,与同步执行相比,总体周转时间将减少。但是,如果任务不像数据库操作那样昂贵。与同步执行相比,整体周转时间会增加。这是由于处理额外线程的开销。

另一个原因是复杂性,异步总是很复杂,需要额外的代码来使事情异步。然而,像 Jersey 这样的框架在一定程度上隐藏了这种复杂性。

因此,始终建议以异步方式处理昂贵的操作,即执行需要时间的操作,以便减少整体周转时间。不建议对每个操作执行 异步

关于java - 为什么不对 JAX-RS 中的所有资源使用异步响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44855577/

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