Multithreading in ASP.NET 2

di: Sosan Abou Assalè     14 Febbraio 2007

Il .NET Framework fornisce la possibilità di creare applicativi multithreaded. In questo articolo viene spiegato il concetto di Multithreading e le tecniche per poter gestire i thread in maniera efficace e semplice. In particolare, vedremo come eseguire una procedura in un thread separato aggiungendo questo thread ad un thread pool.

Cos'è il Multithreading

Il Multithreading è quella caratteristica (tipica dei sistemi operativi) che permette ad una applicazione di eseguire una o più azioni (thread) in parallelo.

Nel caso specifico è utile se vogliamo evitare che il thread corrispondente ad una richiesta, venga bloccato finché questa venga portata a termine. In una applicazione "Multithreaded" possiamo svolgere più attività (o task) contemporaneamente: l'azione successiva può essere svolta senza dover attendere che quella precedente venga completata. Ad esempio nei programmi di elaborazione testi (come Word), mentre digitiamo il testo viene svolto anche il controllo dell'ortografia e il salvataggio del documento ad intervalli regolari di tempo.

Per comprenderne il funzionamento esaminiamo un esempio con un singolo thread.

Listato 1. Codice che non sfrutta il multithreading

Class _Default Inherits System.Web.UI.Page

  Public Sub Sub1()
    Dim i As Integer
    For i = 1 To 5
      Response.Write("Sub1() </br>")
    Next
  End Sub

  Public Sub Sub2()
    Dim i As Integer
    For i = 6 To 10
    Response.Write("Sub2() </br>")
  Next

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Sub1()
  Sub2()
  Response.Write("</br> ---- FINE ----")
End Sub

End Class

Figura 1. Esecuzione sequenziale

Esecuzione sequenziale

La Sub2() viene eseguita solamente quando Sub1() ha completato la sua esecuzione. Questo perchè quando una procedura o una funzione viene richiamata il controllo dell'esecuzione viene trasferito all'interno della funzione (o procedura).

Quando termina l'esecuzione della procedura, l'applicazione riparte dalla linea di codice successiva alla linea che ha richiamato la procedura.

Utilizzando il Multithreading, possiamo eseguire due thread concorrenti (in parallelo) all'interno della stessa applicazione. Questa tecnica diventa indispensabile quando si eseguono operazioni molto lunghe e laboriose che richiedono elevati carichi di lavoro come:

  • query complesse su database
  • operazioni di Input/Output
  • chiamate a web service remoti

Se una di queste operazioni, impiega un intervallo di tempo che viene considerato inaccettabile, è buona regola ricorrere al multithreading, altrimenti il thread corrispondente alla richiesta, viene bloccato fin quando la medesima richiesta non viene portata a termine.

In questo modo, l'interfaccia della nostra applicazione non viene bloccata e si possono quindi eseguire altre operazioni, mentre la funzione che richiede tempi di esecuzione lunghi continua ad essere eseguita in background.

È importante ricordare che bisogna prestare la massima attenzione quando si lavora con il multithreading perché in questo tipo di applicazione i bug sono difficili da intercettare e la creazione e la distruzione dei thread possono anche decrementare le performance della nostra applicazione se sono mal gestiti.

Guide ASP.Net

Guida Windows Azure Code Snippets

Le migliori pratiche per far girare le applicazioni "in the cloud",...

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Amministratore di Reti Windows Server 2008

20 Febbraio 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto