が、私はこれを正しく理解しています:「DEFエンドポイントは」同期ブロッキング方法であり、そしてそれはフレームワークによって決まるので、あなたは、その事実を変えることはできませんか?
ここでは、計算/ IOがあなたに戻ってくるのを待ってブロックする必要があるということです。つまり、そこに1つのスレッドを使用することも意味します。
私は、多くの待機中のスレッドでエンドポイントを「オーバーロード」しないようにすることができます。したがって:
- 同様にタイムアウトを指定します。
- あなたが受け入れようとしている「待っているスレッド」がいくつあるか考えてみましょう。そして、多くの人が待っているならば、もっと多くのリクエストを流す。同様:
val waiting = new AtomicInteger(0)
val maxThreadsWaiting = 200
def endpoint() ={
try{
val numberThreadsWaiting = waiting.incrementAndGet()
if(numberThreadsWaiting > maxThreadsWaiting) {
// Return 'overload' failure. Like HTTP 503
} else{
Await.result(slowComputation(), Duration(1, SECONDS))
}
} finally {
waiting.decrementAndGet()
}
}
あなたはScalaの並列コレクションあなたのコメントを – alifirat
のおかげで外観を持つことができます。私はそれぞれのタスクが独立しているので、私はできるとは思えません。たとえば、要求ごとにオーディオファイルを変更します。それらは集約されませんが、処理され、それぞれのクライアントに返されます。 – tgk