2009-08-27 9 views
16

Mi considero consapevole dei concetti di threading e perché determinati codici sono o non sono "thread-safe", ma come qualcuno che lavora principalmente con ASP.NET, la sicurezza di threading e thread è qualcosa a cui raramente penso. Tuttavia, mi sembra di imbattersi in numerosi commenti e risposte (non necessariamente per ASP.NET) su Stack Overflow per l'effetto di "avviso - che non è thread-safe!, "e tende a indurmi a pensare se ho scritto un codice simile che potrebbe effettivamente causare un problema nelle mie applicazioni. [Shock, orrore, ecc] Quindi sono costretto a chiedere: gli sviluppatoriGli sviluppatori ASP.NET devono davvero preoccuparsi della sicurezza dei thread?

Do ASP.NET davvero bisogno di essere interessati con la sicurezza dei thread?

Prendete il mio: Mentre un'applicazione web è intrinsecamente multi-threaded, ogni richiesta particolare arriva su un singolo thread, e tutti non statici tipi di creare, modificare o distruggere sono esclusivi a quel singolo thread/richiesta. Se la richiesta crea un'istanza di un oggetto DAL che crea un'istanza di un oggetto business e I want to lazy-initialize a collection within this object, , non importa se non è thread-safe, perché non verrà mai toccato da un altro thread. ...Destra? (Supponiamo di non iniziare un nuovo thread per avviare un processo asincrono di lunga durata durante la richiesta.) Sono perfettamente consapevole del fatto che cambia tutto.)

Naturalmente, classi, metodi e variabili statici sono solo le di fronte. Sono condivisi da ogni richiesta e lo sviluppatore deve stare molto attento a non avere codice "non sicuro" che, quando viene eseguito da un utente, può avere un effetto non voluto su tutti gli altri.

Ma questo è tutto, e quindi la sicurezza dei thread in ASP.NET si riduce principalmente a questo: Prestare attenzione a come si progetta e si utilizza la statica. Oltre a questo, non devi preoccuparti di niente.

Mi sbaglio su tutto ciò? Sei in disaccordo? Illuminami!

risposta

8

Ci sono alcuni oggetti oltre agli elementi statici che sono condivisi tra tutte le richieste di un'applicazione.Fai attenzione a mettere gli oggetti nella cache dell'applicazione che non sono thread-safe, per esempio. Inoltre, nulla ti impedisce di generare i tuoi thread per l'elaborazione in background mentre gestisci una richiesta.

+1

Non dimenticare i valori di sessione. :) – Randolpho

+0

A quale punto i valori di sessione saranno accessibili da più di un thread? –

3

Credo che tu abbia coperto tutto molto bene. Sono d'accordo con te. Essendo focalizzato su ASP.NET solo raramente (se non del tutto) arriva a problemi multi-threading.

La situazione tuttavia cambia quando si tratta di ottimizzazioni. Ogni volta che si avvia una query di lunga durata, è possibile che si desideri eseguire l'esecuzione in un thread separato in modo che il caricamento della pagina non si interrompa finché il server non segnala il timeout della connessione. Potresti desiderare che questa pagina controlli periodicamente lo stato di completamento per avvisare l'utente. Qui dove si tratta di problemi multi-threading.

4

Ci sono diversi livelli di sviluppatori ASP.NET. Potresti fare una carriera perfetta come uno sviluppatore ASP.NET senza sapere niente thread, mutex, lock, semafori e persino schemi di progettazione perché un'alta percentuale di applicazioni ASP.NET sono fondamentalmente applicazioni CRUD con poca o nessuna logica di business aggiuntiva.

Tuttavia, la maggior parte degli sviluppatori ASP.NET che ho incontrato non sono solo gli sviluppatori ASP.NET, le loro competenze sono in grado di conoscere tutto sul threading e altre cose utili perché non si limitano a ASP .NETTO.

Quindi no, per la maggior parte gli sviluppatori di ASP.NET non hanno bisogno di conoscere la sicurezza dei thread. Ma che divertimento c'è solo conoscendo il minimo indispensabile?

+1

Mi piace che tu l'abbia indicato - Sono d'accordo, e non intendevo suggerire che lo sviluppatore come persona non dovrebbe imparare le sfumature del threading. È solo che continuo a correre attraverso il "non thread-safe !!" messaggi di avviso così spesso, è un po 'di distrazione quando potrebbe non essere un problema per la maggior parte delle applicazioni ASP.NET. –

3

Solo se si crea, all'interno del flusso di elaborazione per una singola richiesta HTTP, più thread di proprio ... Ad esempio, se la pagina Web visualizza le quotazioni di borsa per un gruppo di azioni e si effettuano chiamate separate a un servizio di quotazione di titoli, su thread indipendenti, per rivedere le quotazioni, prima di generare la pagina da inviare al client ... Quindi dovresti assicurarti che il codice che stai utilizzando in le tue discussioni sia thread-safe.

Problemi correlati