我是一般玩框架和Scala的新手。雖然試圖測試和了解同步和異步操作之間的差異,使用下面的代碼:爲什麼我的異步控制器被阻塞?
package controllers
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits._
import scala.concurrent.Future
object Application extends Controller {
def async = Action.async {
Logger.info("async start")
val resultF = Future {
Thread.sleep(2000)
Logger.info("async end")
Ok
}
Logger.info("non-blocking")
resultF
}
def sync = Action {
Thread.sleep(2000)
Ok
}
}
運行應用程序時,我已經在瀏覽器中的10個標籤請求「/異步」。我的期望是所有請求都需要大約2秒鐘的時間才能完成,我會在日誌10中看到「異步開始」條目,然後是10個「異步結束」條目。
但是,實際結果是看到「異步開始」,「異步結束」10次。直到前一個請求完成,下一個請求才開始。看起來異步的執行是阻塞的,根本無法處理併發請求。
我的問題是爲什麼系統會以這種方式運行,以及啓用併發請求處理的具體更改。
https://www.playframework.com/documentation/2.5.x/ThreadPools – danielnixon