Tempi di risposta lunghi rispetto a problemi di concorrenza su un server Web con multithreading

0

Una classe con un'inizializzazione lenta utilizzata per elaborare una richiesta porta a tempi di risposta lunghi. Ma il vero metodo usato è abbastanza veloce. Se la classe fosse statica, credo che sarebbe necessario elaborare una richiesta alla volta. Quindi, quale sarebbe il modo migliore di combattere il lungo periodo di inizializzazione senza intasare le richieste?

Un po 'di background. La classe inizializza un sottoprocesso Python e convoglia i stdin e stdout . Carica una libreria pesante e una quantità enorme di dati per il calcolo, quindi l'inizializzazione lenta. La pipa è ciò di cui sono preoccupato, poiché mi aspetto una linea di risposta per una linea di input.

Pensieri, idee? Sono aperto persino a modificare l'approccio se è necessario per ottenere risultati migliori. Sono abbastanza nuovo per i servizi web e sono stato gettato in profondità, quindi qualsiasi intuizione è molto apprezzata.

Se è importante, sono su VB / C # .NET.

    
posta Felix 30.07.2018 - 09:28
fonte

2 risposte

1

Should the class be static

No. Crea un'istanza e inizializza la classe all'avvio dell'app e passa ad altre classi che dipendono da essa.

Per sincronizzare le chiamate sui thread, prevenendo input, input, output, output anziché input, output, input, output, la classe stessa dovrà utilizzare internamente un semaphoreSlim o un mutex.

    
risposta data 30.07.2018 - 09:59
fonte
0

Should the class be static?

Sì, ma con un avvertimento. È necessario assicurarsi che il metodo richiamato nel sottoprocesso Python non modifichi lo stato in alcun modo, oppure se lo stato è alterato, può gestire chiamate simultanee.

Se questo non è il tuo caso, puoi comunque renderlo statico, a patto di mettere la chiamata effettiva a python in un blocco sincronizzato per garantire che solo una discussione stia effettuando la richiesta alla volta.

Considera di estrarre l'inizializzazione di Python e inserirla nella propria classe di gestione e usarla per eseguire qualsiasi e tutte le chiamate a Python. Idealmente dovresti usare l'iniezione di dipendenza per aggiungerla alla tua classe per l'uso.

    
risposta data 30.07.2018 - 10:00
fonte

Leggi altre domande sui tag