私は一般的にフレームワークとスケーラをプレイするのが新しいです。テストし、同期と非同期の行動の違いを理解しようとしているときに、次のコードを使用して: 私の非同期コントローラがブロックされているのはなぜですか?
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秒の間にfurfillを取る必要があり、私はログ10に "async start"エントリと、それに続く10個の "async end"エントリが表示されます。
しかし、実際の結果は「非同期開始」、「非同期終了」が10回ありました。次の要求は、前の要求が完了するまで開始しませんでした。非同期の実行がブロックされていて、同時要求を一切処理できないようです。
私の質問は、システムがこのように動作する理由と、同時要求処理を有効にするための具体的な変更内容です。
https://www.playframework.com/documentation/2.5.x/ThreadPools ApacheBenchを示唆ため – danielnixon