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