En general, la ejecución de SQL Las llamadas a DB generalmente se bloquean y ejecutan secuencialmente. Play tiene una gran compatibilidad con la ejecución asincrónica que mejora el rendimiento de tu aplicación.
Trabajando ejemplo de código para el juego 2,0
public static Result slow() {
Logger.debug("slow started");
// Start execution
Promise<DataObject> userObject1 = SlowQuery.getUser(440);
Promise<DataObject> userObject2 = SlowQuery.getCategory(420);
// ... here execution is already in progress ...
// Map to Promise Objects
Promise<DataObject> res1 = userObject1.map(new Function<DataObject, DataObject>() {
public DataObject apply(DataObject res) {
Logger.debug("Got result (userObject1): " + res.toString());
return res;
}
});
Promise<DataObject> res2 = userObject2.map(new Function<DataObject, DataObject>() {
public DataObject apply(DataObject res) {
Logger.debug("Got result (userObject2): " + res.toString());
return res;
}
});
// here we wait for completion - this blocks
userObject1.getWrappedPromise().await();
userObject2.getWrappedPromise().await();
// the result is available
Logger.debug(res1.get().toString());
Logger.debug(res2.get().toString());
Logger.debug("slow finished");
return ok("done");
}
se sienten libres para mejorar el uso de la función wiki de la comunidad - Estoy seguro de que algunas partes se pueden acortar.
Gracias. Sin embargo, no estoy seguro de entender cómo los trabajos pueden ser no bloqueantes. Si mi cliente MySQL está bloqueando, entonces usarlo dentro de un trabajo todavía estaría bloqueando, ¿no? ¿O Play genera un nuevo hilo cada vez que se crea un nuevo trabajo? En ese caso, de alguna manera se vence el objetivo de un marco asíncrono. – Continuation
@Continuation Creo que puede confundir el "marco asíncrono" con "framework capaz de operaciones asincrónicas" en lo que respecta a Play! ¿marco de referencia? Como explica la documentación vinculada, puede usar trabajos para realizar operaciones de larga ejecución de forma asincrónica desde la solicitud HTTP y sin bloqueo a otras solicitudes HTTP entrantes. – tmbrggmn