Oracle
 sql >> Database >  >> RDS >> Oracle

Il codice ad alta intensità di I/O asincrono è più lento di quello non asincrono, perché?

La versione asincrona sarà sempre più lenta della versione sincrona in assenza di concorrenza. Sta facendo lo stesso lavoro della versione non asincrona, ma con una piccola quantità di sovraccarico aggiunto per gestire l'asincronia.

L'asincronia è vantaggiosa, rispetto alle prestazioni, poiché consente una migliore disponibilità. Ogni singola richiesta sarà più lenta, ma se effettui 1000 richieste contemporaneamente, l'implementazione asincrona sarà in grado di gestirle tutte più rapidamente (almeno in determinate circostanze).

Ciò accade perché la soluzione asincrona consente al thread allocato per gestire la richiesta di tornare al pool e gestire altre richieste, mentre la soluzione sincrona forza il thread a rimanere lì e non fare nulla mentre attende il completamento dell'operazione asincrona. C'è un sovraccarico nella strutturazione del programma in un modo che consenta al thread di essere liberato per svolgere altro lavoro, ma il vantaggio è la capacità di quel thread di svolgere altro lavoro. Nel tuo programma non c'è altro lavoro da fare per il thread, quindi finisce per essere una perdita netta.