当前位置: 首页 > 网络应用技术

Spring Boot G G @@ async

时间:2023-03-07 10:23:31 网络应用技术

  异步呼叫几乎是处理高高并发送Web应用程序性能问题的金钱。那么什么是异步呼唤?

  “异步调用”对应于“同步呼叫”。同步调用索引程序是按照定义顺序执行的。每条过程都必须等待完成上一行的执行。异步调用程序的索引是按顺序执行的,并且不会等待异步调用而无需等待异步调用。如果语句返回结果,则执行后续程序。

  以下是一个简单的示例,可以直观地理解同步调用是什么:

  定义任务类,创建三个处理功能以模拟三个执行任务的操作,并且操作会随机消耗时间(在10秒内)

  在单元测试用例中,注入任务对象,并在测试用例中执行Dotaskone,DotaskTwo和DotaskThree。

  执行单元测试,您可以看到以下输出:

  任务I.任务II以及任务的三个顺序执行,换句话说,Dotaskone,DotaskTwo和DotaskThree的三个函数的执行。

  尽管上述同时呼叫已成功执行三个任务,但可以看出,执行时间相对较长。如果这三个任务本身之间没有依赖性,则可以同时执行同步呼叫,在执行效率方面很差。它可以通过异步调用同时考虑。

  在Spring Boot中,我们只需要通过使用@ASYNC注释将原始同步函数更改为异步函数。任务类已更改为以下模式:

  为了启用注释,还需要在Spring Boot的主要程序中配置它,如下所示:

  目前,您可以反复执行单元测试,并且您可能会遇到各种结果,例如:

  原因是Dotaskone,DotaskTwo和DotaskThree的当前三个函数已经是异步的。在主程序称为异步后,主程序不在乎这三个函数的三个函数是否完成。由于没有其他内容需要执行,因此程序会自动结束,导致不完整或没有输出任务挂起的内容。

  注意: @async的修改功能不应定义为静态类型,因此异步调用不会生效

  为了允许Dotaskone,DotaskTwo和DotaskThree正常结束,假设我们需要计算执行中消耗多少时间。

  那么,我们如何判断是否执行了以上三个异步调用?我们需要使用未来来返回异步呼叫的结果,就像Dotaskone函数转换为如下:

  在将其他两个异步函数转换为上述方式之后,让我们转换下面的测试用例,以便测试在等待完成三个异步调用后将执行其他事情。

  看看我们做出了什么变化:

  跳出周期后,根据计算三个任务的总时间,计算并发的总时间。

  执行上述单元测试后,您可以看到以下结果:

  可以看出,通过异步呼叫,任务与任务结合执行,二和三,并有效地减少了程序的总操作时间。