Condividi tramite


Thread e processi

I termini thread e processi costituiscono concetti correlati in ambito informatico. Entrambi rappresentano infatti sequenze di istruzioni che devono essere eseguite in un ordine specifico. Le istruzioni incluse in thread o processi distinti possono tuttavia essere eseguite in parallelo.

I processi sono disponibili nel sistema operativo e corrispondono a ciò che gli utenti visualizzano sotto forma di programmi o applicazioni. I thread sono invece disponibili nei processi. Per questo motivo vengono talvolta definiti processi leggeri. Ciascun processo è costituito da uno o più thread.

La presenza di più processi consente a un computer di eseguire più attività contemporaneamente. La presenza di più thread consente invece a un processo di suddividere le operazioni da eseguire in parallelo. In un computer con più processori, i processi o i thread possono essere eseguiti in processori diversi consentendo l'effettiva elaborazione in parallelo.

Una perfetta elaborazione in parallelo non è sempre possibile. È talvolta necessario sincronizzare i thread. È inoltre possibile che un thread debba attendere un risultato di un altro thread o disporre di accesso esclusivo a una risorsa utilizzata da un altro thread. I problemi di sincronizzazione costituiscono una causa comune di bug in applicazioni con multithreading. È talvolta possibile che i thread rimangano in attesa di una risorsa che non diviene mai disponibile, causando una condizione denominata deadlock.

Nel debugger di Visual Studio sono disponibili strumenti efficaci e di facile utilizzo per il debug di thread e processi.

Strumenti per il debug di thread e processi in Visual Studio

I principali strumenti per la gestione dei processi in Visual Studio sono la finestra di dialogo Connetti a processo, la finestra Processi e la barra degli strumenti Posizione di debug. I principali strumenti per il debug dei thread sono la finestra Thread, gli indicatori dei thread nelle finestre di origine e la barra degli strumenti Posizione di debug.

I principali strumenti per il debug di applicazioni multithreading sono le finestre Stack in parallelo e Attività in parallelo.

Nella tabella riportata di seguito sono illustrate le informazioni disponibili e le operazioni che è possibile eseguire con ciascuno strumento:

Interfaccia utente

Informazioni disponibili

Operazioni eseguibili

Finestra di dialogo Connetti a processo

Processi disponibili cui è possibile eseguire la connessione:

  • Nome di processo (estensione exe)

  • Numero di ID di processo

  • Titolo della barra dei menu

  • Tipo (Managed v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64)

  • Nome utente (nome di account)

  • Numero di sessione

Selezione di un processo a cui connettersi

Selezione di un computer remoto

Modifica del tipo di trasporto per la connessione a computer remoti

Finestra Processi

Processi collegati:

  • Nome di processo

  • Numero di ID di processo

  • Percorso dell'eseguibile (file con estensione exe) di processo

  • Titolo della barra dei menu

  • Stato (Interrompi. In esecuzione)

  • Debug (nativo, gestito e così via)

  • Tipo di trasporto (predefinito, nativo senza autenticazione)

  • Qualificatore di trasporto (computer remoto)

Strumenti:

  • Connetti

  • Disconnetti

  • Termina

Menu di scelta rapida:

  • Connetti

  • Disconnetti

  • Disconnetti al termine del debug

  • Termina

Finestra Thread

Thread nel processo corrente:

  • ID thread

  • ID gestito

  • Categoria (thread principale, thread dell'interfaccia, gestore delle chiamate a una procedura remota o thread di lavoro)

  • Nome thread

  • Percorso in cui viene creato il thread

  • Priorità

  • Affinity Mask

  • Numero sospesi

  • Nome di processo

  • Indicatore flag

  • Indicatore di sospensione

Strumenti:

  • Cerca

  • Cerca nello stack di chiamate

  • Contrassegna Just My Code

  • Contrassegna selezione moduli personalizzata

  • Raggruppa per

  • Colonne

  • Espandi/Comprimi stack di chiamate

  • Espandi/comprimi gruppi

  • Blocca/sblocca thread

Menu di scelta rapida:

  • Mostra thread nell'origine

  • Passa al thread

  • Blocca un thread in esecuzione

  • Sblocca un thread bloccato

  • Imposta flag del thread per studio aggiuntivo

  • Rimuovi flag del thread

  • Rinomina thread

  • Mostra/Nascondi thread

Altre azioni:

  • Visualizzare lo stack di chiamate per un thread in un suggerimento dati

Finestra di origine

Gli indicatori dei thread all'estrema sinistra indicano thread singoli o più thread (disattivati per impostazione predefinita, si attivano tramite il menu di scelta rapida nella finestra Thread)

Menu di scelta rapida:

  • Passa al thread

  • Imposta flag del thread per studio aggiuntivo

  • Rimuovi flag del thread

Barra degli strumenti Posizione di debug

  • Processo corrente

  • Thread corrente

  • Stack frame corrente

  • Passare a un altro processo

  • Passare a un altro thread del processo corrente

  • Passare a un altro stack frame del thread corrente

  • Contrassegnare o rimuovere i contrassegni dei thread correnti

  • Mostrare solo thread con flag

Finestra Stack in parallelo

  • Stack di chiamate per più thread in una finestra.

  • Stack frame Attivo per ogni thread.

  • Chiamanti e chiamati per ogni metodo.

  • Filtraggio di thread specificati

  • Passaggio alla visualizzazione Attività in parallelo

  • Contrassegno o rimozione del contrassegno di un thread

  • Zoom

Finestra Attività in parallelo

  • Visualizzare informazioni sugli oggetti Task inclusi ID attività, stato dell'attività (programmato, in esecuzione, in attesa, in deadlock) e il thread assegnato all'attività.

  • Percorso corrente nello stack di chiamate.

  • Delegato passato all'attività in fase di creazione

  • Passare all'attività corrente

  • Contrassegnare o rimuovere il contrassegno di un'attività

  • Bloccare o sbloccare un'attività

Vedere anche

Attività

Procedura: utilizzare la finestra Processi

Altre risorse

Connessione a processi in esecuzione

Debug di applicazioni multithreading