, verilen iki kod parçacıkları arasında belirgin bir fark olacaktır.
Buradaki fark, "sync"
durumunuzda, tüm iş parçacığı/aktör/her ne olursa olsun, isteğinizi işte yürütmeniz, Thread.sleep
'un bitmesini beklerken baş parmaklarını ikiye böler. Buna göre "async"
durumda
, elleçleme fonksiyonu aslında çalıştırın ve gelmiştir böylece onu ran kaynak başka şeyler yapmak için yukarı serbest (/ ne olursa olsun iplik/aktör). Future
sonuçta tamamlandığında, işi bitirebilir. Biz sync
son nokta vurduğunda
def intensiveComputation(): Int = {
Logger.info("Sleeping")
Thread.sleep(5000)
Logger.info("Woke up")
return 1
}
def testPromiseSync() = Action {
val result = Ok("sync" + intensiveComputation())
Logger.info("returning to Play")
result
}
def testPromiseAsync = Action.async {
val futureint = scala.concurrent.Future { intensiveComputation() }
val f = futureint.map(i => Ok("async" + i))
Logger.info("returning to Play")
f
}
görürüz:
farkı görmek için en iyi yolu günlük girdilerini birkaç serpin etmektir
2014-05-14 17:23:39,359 [info] application - Sleeping
2014-05-14 17:23:44,359 [info] application - Woke up
2014-05-14 17:23:44,359 [info] application - returning to Play
Ve async
:
2014-05-14 17:24:23,376 [info] application - Sleeping
2014-05-14 17:24:23,376 [info] application - returning to Play
2014-05-14 17:24:28,376 [info] application - Woke up
Action.async
numaralı telefonu kullanarak Son kullanıcı deneyimini değiştirmeden tutarken, "bir kerede" daha fazla istekte bulunmak için y.
Çok hızlısın. İyi cevap. – goral
"... ** tüm iş parçacığı/aktör/her neyse-bu, Play'deki isteğinizi işleyen bir şeydi, Thread.sleep'in bitmesini beklerken baş parmaklarını ikiye böldü." Ifadesi bir biraz kafa karıştırıcı. Google Play'deki eylemler varsayılan olarak async olduğundan ve ** iş ** iş parçacığı olduğundan, istek engellenmez. – srzhio