function2()通过函数2()获得什么利润(除了两个GET查询执行时的小并行性)?在我看来,控制器线程在两种情况下都不被阻塞,但是在等待结果时必须阻止其中一个后台线程。更好的例子是,当我们查看function3()时,我们看到databaseDao线程被阻塞直到操作完成(在使用JPA的dao内部)。发挥框架,承诺,非阻塞线程编程
public static F.Promise<Result> function1() {
final F.Promise<WSResponse> twitterPromise = WS.url("http://www.twitter.com").get();
final F.Promise<WSResponse> typesafePromise = WS.url("http://www.typesafe.com").get();
return twitterPromise.flatMap((twitter) -> typesafePromise.map((typesafe) -> ok(twitter.getBody() + typesafe.getBody())));
}
public static F.Promise<Result> function2() {
F.Promise<String> promise = F.Promise.promise(() -> {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request1 = new HttpGet("http://www.twitter.com");
HttpGet request2 = new HttpGet("http://www.typesafe.com");
HttpResponse response = client.execute(request1);
HttpResponse response2 = client.execute(request2);
// result is not important
return response.toString() + response2.toString();
});
return promise.map(Results::ok);
}
public static F.Promise<Result> function3() {
F.Promise<String> promise = F.Promise.promise(() -> databaseDao.longRunningOperation());
return promise.map(Results::ok);
}
如果函数阻塞我们的后台线程池消失得很快。那么非盈利性的框架和Spring框架和tomcat的承诺呢?
编辑:
public static F.Promise<Result> function4() {
F.Promise<String> promise = F.Promise.promise(() -> {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request1 = new HttpGet("http://www.twitter.com");
HttpResponse response = client.execute(request1);
return response.toString();
});
F.Promise<String> promise2 = F.Promise.promise(() -> {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request2 = new HttpGet("http://www.typesafe.com");
HttpResponse response2 = client.execute(request2);
return response2.toString();
});
return promise.flatMap(p1 -> promise2.map(p2 -> ok(p1 + p2)));
}
上面的函数阻止两个线程,因此它比功能1更糟?但执行时间可以相当。例如,如果promise1需要5秒,并且promise2需要4秒,结果会在5秒内出现?
在你的第一个例子中,如果twitter req。需要5秒钟和类型安全需求。需要4秒钟,你会在5秒内得到你的结果。在第二个功能中,需要9秒。另外对于我所知道的JDBC而言,如果你使用Play,Spring或者???,那么它并不重要,它会阻止某处 – Salem 2015-03-03 15:27:54