Informazioni su processi e thread

Ogni processo fornisce le risorse necessarie per eseguire un programma. Un processo ha uno spazio indirizzi virtuale, codice eseguibile, handle aperti agli oggetti di sistema, un contesto di sicurezza, un identificatore di processo univoco, variabili di ambiente, una classe di priorità, dimensioni minime e massime del set di lavoro e almeno un thread di esecuzione. Ogni processo viene avviato con un singolo thread, spesso denominato thread primario, ma può creare thread aggiuntivi da qualsiasi thread.

Un thread è l'entità all'interno di un processo che può essere pianificato per l'esecuzione. Tutti i thread di un processo condividono lo spazio indirizzi virtuale e le risorse di sistema. Inoltre, ogni thread gestisce gestori di eccezioni, una priorità di pianificazione, un'archiviazione locale thread, un identificatore di thread univoco e un set di strutture che il sistema userà per salvare il contesto del thread fino a quando non viene pianificato. Il contesto del thread include il set di registri del computer, lo stack del kernel, un blocco di ambiente thread e uno stack di utenti nello spazio indirizzi del processo del thread. I thread possono anche avere un proprio contesto di sicurezza, che può essere usato per rappresentare i client.

Microsoft Windows supporta il multitasking preemptive, che crea l'effetto dell'esecuzione simultanea di più thread da più processi. In un computer multiprocessore il sistema può eseguire simultaneamente quanti thread sono presenti processori nel computer.

Un oggetto processo consente ai gruppi di processi di essere gestiti come unità. Gli oggetti del processo sono oggetti a protezione diretta, condivisibili che controllano gli attributi dei processi associati. Le operazioni eseguite sull'oggetto processo influiscono su tutti i processi associati all'oggetto processo.

Un'applicazione può usare il pool di thread per ridurre il numero di thread dell'applicazione e fornire la gestione dei thread di lavoro. Le applicazioni possono accodamento di elementi di lavoro, associare handle di attesa, accodamento automatico in base a un timer e associarsi a I/O.

La pianificazione in modalità utente (UMS) è un meccanismo leggero che le applicazioni possono usare per pianificare i propri thread. Un'applicazione può passare da thread UMS in modalità utente senza coinvolgere l'utilità di pianificazione del sistema e recuperare il controllo del processore se un thread UMS blocca nel kernel. Ogni thread UMS ha un proprio contesto di thread anziché condividere il contesto del thread di un singolo thread. La possibilità di passare tra thread in modalità utente rende UMS più efficiente rispetto ai pool di thread per elementi di lavoro a breve durata che richiedono poche chiamate di sistema.

Una fibra è un'unità di esecuzione che deve essere pianificata manualmente dall'applicazione. Le fibre vengono eseguite nel contesto dei thread che li pianificano. Ogni thread può pianificare più fibre. In generale, le fibre non offrono vantaggi su un'applicazione multithreaded ben progettata. Tuttavia, l'uso di fibre può semplificare la conversione delle applicazioni progettate per pianificare i propri thread.

Per altre informazioni, vedere gli argomenti seguenti: