0

我目前有一个 grails 应用程序,在 grails 2.4.2 上运行,它似乎使用 java 期货以阻塞方式进行 REST 调用,如下所示

Future<Map<String,Object>> future1 = service.getMetrics(args1)
Future<Map<String,Object>> future2 = service.getMetrics(args2)

Map<String,Object> result1 = future1.get(10, TimeUnit.DAYS.MINUTES)
Map<String,Object> result2 = future2.get(10, TimeUnit.DAYS.MINUTES)

我的目标是将这段代码重构为异步的,因为上面的代码片段似乎通过立即调用“阻塞”get 函数来破坏使用异步编程的目的。我正在考虑以下选项

  1. Grails 承诺
  2. Guava 可听的未来
  3. Java 8:可完成的未来

我的问题不是要考虑哪些选项,而是更多关于是否有一种简单、简单的方法来衡量指标,以表明使用非阻塞调用将为访问 grails web 应用程序的用户提供更好的响应时间。

4

1 回答 1

0

我不确定这是否会对您的旅行有所帮助,但我正在玩听起来很相似的问题。我试图找出我是否对代码的一部分进行了多线程处理,它是否最终会减少整个请求时间。我的方法的某些部分太小而无法从线程中受益。

这是我粘贴在我正在测试指标的方法顶部的代码片段的链接。调整方法后,我将删除此代码:

https://gist.github.com/mikedehaan/ed2751601046b6d1d078

这允许我用 gotHere() 语句装饰方法,这些语句打印从方法开始的时间和 gotHere() 调用之间的时间。

例子:

gotHere("Start Process");

def promise1 = task {
    // Do something that takes time
}

// Do something else while we're waiting for promise1 to finish

// Block until promise1 completes
def result = promise1.get();

gotHere("Process Finished");

这不是一个永久性的指标解决方案,但它确实帮助我调整了性能方法。

希望这可以帮助。

于 2016-01-08T01:32:01.067 回答