Play Framework: o que acontece quando as solicitações excedem os threads disponíveis
Eu tenho um thread na solicitação de bloqueio de manutenção do pool de threads.
def sync = Action {
import Contexts.blockingPool
Future {
Thread.sleep(100)
}
Ok("Done")
}
No Contexts.blockingPool está configurado como:
custom-pool {
fork-join-executor {
parallelism-min = 1
parallelism-max = 1
}
}
Em teoria, se a solicitação acima receber 100 solicitações simultâneas, o comportamento esperado deve ser: 1 solicitação deve dormir (100) e o restante de 99 solicitações deve ser rejeitado (ou enfileirado até o tempo limite?). No entanto, observei que threads de trabalho extras são criados para atender ao restante das solicitações. Também observei que a latência aumenta à medida que (fica mais lenta a solicitação de serviço) à medida que o número de threads no pool fica menor que as solicitações recebidas.
Qual é o comportamento esperado se uma solicitação maior que o tamanho do conjunto de encadeamentos configurado for recebida?