Threading (C# e Visual Basic)
Il threading consente di eseguire elaborazioni simultanee in un programma in Visual Basic o C# in modo da poter eseguire più di un'operazione alla volta. È ad esempio possibile utilizzare il threading per monitorare l'input dell'utente, eseguire attività in background e gestire flussi di input simultanei.
Di seguito sono riportate le caratteristiche principali dei thread:
Consentono di eseguire elaborazioni simultanee nel programma.
Possono essere utilizzati facilmente grazie allo spazio dei nomi System.Threading di .NET Framework.
Condividono le risorse dell'applicazione. Per ulteriori informazioni, vedere Utilizzo di thread e threading.
Per impostazione predefinita, i programmi Visual Basic o C# comprendono un unico thread. È tuttavia possibile creare e utilizzare thread ausiliari per eseguire il codice in parallelo con il thread primario. Questi thread vengono definiti thread di lavoro.
I thread processo di lavoro possono essere utilizzati per eseguire attività lunghe o in cui il tempo riveste molta importanza, senza bloccare il thread primario. Ad esempio, vengono spesso utilizzati nelle applicazioni server per soddisfare le richieste in arrivo senza attendere il completamento della richiesta precedente. Vengono inoltre utilizzati per eseguire attività in background nelle applicazioni desktop, in modo tale che il thread principale, che gestisce gli elementi dell'interfaccia utente, garantisca tempi di risposta ottimali per le azioni dell'utente.
Il threading consente di risolvere i problemi legati alla velocità effettiva e alla velocità di risposta, ma può comportare problemi di condivisione delle risorse, quali i deadlock e le race condition. L'utilizzo di più thread è consigliato per le attività che richiedono risorse differenti, ad esempio handle di file e connessioni di rete. L'assegnazione di più thread a un'unica risorsa potrebbe generare errori di sincronizzazione e se i thread vengono bloccati di frequente in attesa di altri thread lo scopo del multithreading risulta vanificato.
La strategia più diffusa consiste nell'utilizzare i thread di lavoro per eseguire attività lunghe o in cui il tempo riveste importanza, ma che non richiedono molte delle risorse utilizzate da altri thread. Ovviamente alcune risorse del programma devono essere accessibili a più thread. In questi casi lo spazio dei nomi System.Threading fornisce le classi per la sincronizzazione dei thread. Tali classi comprendono Mutex, Monitor, Interlocked, AutoResetEvent e ManualResetEvent.
È possibile utilizzare alcune o tutte queste classi per sincronizzare le attività di più thread, ma il supporto per il multithreading viene fornito in parte dai linguaggi Visual Basic e C#. Le istruzioni Istruzione SyncLock in Visual Basic e lock in C# forniscono ad esempio funzionalità di sincronizzazione tramite l'utilizzo implicito di Monitor.
Nota
In .NET Framework versione 4 la programmazione multithreading viene semplificata grandemente con le classi System.Threading.Tasks.Parallel e System.Threading.Tasks.Task, Parallel LINQ (PLINQ), le nuove classi di insiemi simultanei nello spazio dei nomi System.Collections.Concurrent e un nuovo modello di programmazione basato sul concetto di attività anziché di thread. Per ulteriori informazioni, vedere Programmazione parallela in .NET Framework.
Argomenti correlati
Titolo |
Descrizione |
---|---|
Viene descritto come creare e utilizzare i thread. |
|
Parametri e valori restituiti per routine multithreading (C# e Visual Basic) |
Viene descritto come passare e restituire i parametri con le applicazioni multithreading. |
Procedura dettagliata: multithreading con il componente BackgroundWorker (C# e Visual Basic) |
Viene illustrato il processo di creazione di una semplice applicazione multithreading. |
Viene illustrato come controllare le interazioni di thread. |
|
Viene illustrato come eseguire routine su thread diversi a intervalli fissi. |
|
Viene illustrato come utilizzare un pool di thread processo di lavoro gestiti dal sistema. |
|
Viene illustrato l'utilizzo sincronizzato di più thread nel pool di thread. |
|
Viene illustrato come implementare il threading in .NET Framework. |
Capitoli del libro rappresentati
Threading in C# 3.0 in a Nutshell, Third Edition: A Desktop Quick Reference
Asynchronous Methods in C# 3.0 in a Nutshell, Third Edition: A Desktop Quick Reference
Threading and Synchronization in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers