L'APM sarebbe più veloce o più efficiente di TAP?

2

Sto facendo delle ricerche per un progetto in cui avrò bisogno di creare un servizio in grado di gestire milioni di richieste al minuto. Chiaramente voglio usare un modello di programmazione asincrono per sfruttare al meglio i thread e le risorse. Ma l'utilizzo della memoria e la velocità sono le priorità principali.

Osservando l'originale APM (modello di programmazione asincrona), mi chiedo se potrebbe essere più efficiente o più veloce del più recente TAP (Pattern asincrono basato su attività).

Penso che forse è meglio registrare una funzione di callback piuttosto che "far ruotare" una tonnellata di Task<T> . Il compito deve chiaramente avere un po 'di overhead a destra?

    
posta Coding Gorilla 04.02.2016 - 19:12
fonte

1 risposta

0

Nella mia ricerca ho trovato i due quasi identici. Nel mio caso ho lavorato principalmente con HttpListener e WebRequest classi e infatti la maggior parte dei metodi TAP (ad esempio HttpListener.GetContextAsync() ) sono solo wrapper di Task.FromAsync sui metodi APM con lo stesso nome.

Ho notato un aumento molto piccolo delle allocazioni di memoria per il Task<T> che ha catturato gli oggetti risultato, ma è stato molto difficile per me confrontarle con le allocazioni di memoria con IAsyncResult (solo perché i pattern sono così diverso era difficile fare un confronto). Ma come ho notato l'utilizzo complessivo della memoria di processo era leggermente più alto sotto il pattern TAP.

In alternativa, l'utilizzo / consumo della CPU sembrava essere completamente identico tra i due modelli.

La differenza principale era il codice significativamente più semplice e il debugging più semplice del codice offerto da TAP.

Anche in questo caso la mia ricerca è stata molto specifica per il mio caso d'uso, quindi non voglio proporre questi risultati come risposta alla domanda generale, ma spero che qualcuno trovi la mia ricerca utile in futuro.

    
risposta data 02.03.2016 - 16:06
fonte

Leggi altre domande sui tag