Lees mijn reacties nu gewoon eens voordat je op de Nietes, Nietes, Nietes trein springt

Async is niet hetzelfde als parallel. En een server heeft maar zoveel cores/threads. Je kunt wel 20 queries in parallel uitvoeren, maar dat betekent niet dat ze allemaal even lang duren als wanneer je ze sequentieel uitvoert, integendeel zelfs.
"Al doe je ze in parallel dan duurt je request ergens tussen de executie tijd van de traagste tot aan de som van alle executie tijden. Al doe je ze in sequence dan is het gegerandeerd de worst case van in pararell en duurt de request de som van alle execution tijden."
"ergens tussen" de worst case en best case. En je webserver voert de queries niet uit, dat doet de database server. Je webserver begint alle queries en wacht tot dat de database server antwoord. Tenzij je queries heel snel zijn zal je zien dat een klein aantal thread prima 20 queries kan starten voordat de eerste antwoord. En dan heb je 20 mini-continuations voordat een thread de rest van je request afhandeld.
En terwijl jouw queries worden uitgevoerd kunnen de threads andere nuttige dingen doen. Als je alles lekker blocking sequentieel doet dan hou je threads bezig met niks doen, dat is pas inefficient en slecht schaalbaar.
Simpel gesteld, want:
Eén request dat even 20 databasevervindingen opeet is ook niet echt schaalbaar.
En dat is waarom je een connectie pool gebruikt (zoals ik eerder al zei: "Tenzij je nog niet eens aan connectie pooling doet"). Het enige wat je 20
threadstasks doen is 20 queries bij de connectie pool neerleggen die daar een (bestaande, open) connectie aan toewijst op een manier die de connectie pool bepaald als het meest efficient.
Het is ondertussen 2024, je thread manager, connectiepool en databases server zijn slim genoeg om 20 queries op de meest efficiente manier af te handelen als jij ze gewoon in parallel aanbied.
[
Voor 5% gewijzigd door
RagingPenguin op 14-01-2024 20:44
]