Devi analizzare il tuo codice cercando "turnaround". Un inversione di tendenza è un caso in cui i progressi in avanti sono bloccati fino a quando i dati non possono essere ricevuti dall'altro lato. Ogni tempo di risposta aggiunge una penalità alle prestazioni che si adegua alla latenza. Quindi se hai 12 turnaround, 100 ms di latenza in più significa 1,2 secondi di attesa. Se riesci a ridurre i tempi di risposta a 4, 100 ms di latenza aggiuntiva significa solo 4 secondi di attesa in più.
Alcuni turnaround sono espliciti. Se invii una richiesta e aspetti una risposta, è un inversione di tendenza. Se hai bisogno di vedere quella risposta per decidere quale sarà la prossima richiesta, è un inversione di tendenza.
Alcuni rigiri sono impliciti. Se apri una connessione TCP e attendi per determinare se l'apertura è riuscita, è un inversione di tendenza. Se chiudi una connessione TCP e aspetti che la chiusura sia completa senza errori, è una soluzione.
Trovare e misurare i turnaround è un po 'un'arte nera. Ma un trucco che puoi usare è un simulatore di latenza (Linux può farlo con netem ). Se è possibile aggiungere la registrazione con timestamp o altrimenti dire cosa sta succedendo, è possibile aggiungere un simulatore di latenza di 4 secondi (un dispositivo che aggiunge 4 secondi di ritardo ad ogni pacchetto che lo attraversa). Ogni 4 secondi che spendi in attesa di qualcosa è un ritorno. Puoi contarli e puoi anche vedere dove cadono nel tuo processo operativo.
Il codice che non è mai stato ottimizzato per i turnaround ha spesso un numero elevato di turnaround inutili. In genere, sono invisibili negli ambienti di test perché in genere questi ambienti dispongono del client e del server sulla stessa LAN o, nella peggiore delle ipotesi, molto vicino su una WAN veloce.
Ci sono quattro modi fondamentali per eliminare un inversione di tendenza. Uno è il pipelining - questo in pratica significa solo che non si aspetta una risposta se non è necessario. Puoi tornare indietro e controllare i risultati più tardi. Un altro è il consolidamento: se al momento hai bisogno di due richieste per eseguire alcune operazioni di livello superiore e la riduci a una richiesta, significa che è stato risolto un problema. La terza via è la concorrenza: se riesci a fare più di una cosa alla volta, questo è un capovolgimento andato. L'ultimo è il prefetching: se si conosce un elemento della pagina Web che si sta per caricare è necessario caricare il contenuto di un altro URL, è possibile iniziare a recuperare tale URL mentre si carica la pagina Web che ne ha bisogno.