La priorità è importante solo quando sono presenti più thread eseguibili rispetto ai core della CPU disponibili. Quando ciò accade, la priorità controlla quali thread possono essere eseguiti. Nella maggior parte dei sistemi, non c'è abbastanza calcolo in corso per qualsiasi contesa sulla CPU: i thread sono tutti bloccati , in attesa che accada qualcosa. Potrebbe essere in attesa che tu digiti qualcosa, muovi il mouse, tocchi lo schermo o che i dati arrivino dal disco, dalla rete, da qualche altro dispositivo che hai collegato o che un altro thread finisca di lavorare su un dato critico struttura. Potrebbe essere in attesa di leggere una parte del programma dal disco o della memoria che è stata scambiata per essere letta, anziché leggere esplicitamente un file.
In Windows, lo scheduler mantiene una coda di thread eseguibili a ogni livello di priorità. Quando prende una decisione di pianificazione - che un thread ha esaurito il suo quantum (tempo consentito prima che qualcos'altro debba essere eseguito), il che significa che un altro thread dovrebbe fare un giro, oppure il thread si è bloccato e non è più eseguibile, o una priorità più alta il thread è stato sbloccato: verrà pianificato il thread successivo nella coda al livello di priorità più alto con tutti i thread eseguibili. Se il thread in esecuzione ha esaurito il suo quantum, viene messo alla fine della coda. Se è l'unico thread al suo livello di priorità che è eseguibile e non ci sono altri thread eseguibili con priorità più elevata, ma non in esecuzione, avrà un altro turno.
Nei sistemi multicore / multiprocessore, potrebbero esserci delle restrizioni su quali core può essere eseguito un thread. Inoltre, il sistema cerca di mantenere i thread sul loro core ideale e all'interno del loro nodo NUMA in modo che i dati del thread siano probabilmente ancora nella cache di quel core e abbia un rapido accesso ai dati che ha creato. I thread verranno comunque eseguiti su core non ideali se non è possibile scegliere cosa eseguire successivamente.
Il sistema utilizza vari boost di priorità dinamici e dimensioni quantiche dinamiche in modo che l'applicazione in primo piano ottenga più tempo (se necessario) rispetto ai processi in background e in modo che i processi possano reagire rapidamente al completamento delle operazioni di I / O (inclusi mouse, tastiera e input touchscreen). Inoltre, il potenziamento prioritario viene utilizzato per aggirare le inversioni prioritarie, in cui un thread ad alta priorità è in attesa di una risorsa che è attualmente in possesso di un thread a bassa priorità. Se è in esecuzione anche un thread con priorità media, il thread con priorità bassa del tempo del processore sarà ridotto a fame, mantenendo il thread con priorità alta. Quindi il thread a bassa priorità viene temporaneamente potenziato alla priorità più alta in modo da guadagnare tempo e spero di rilasciare la risorsa di cui il thread ad alta priorità ha bisogno.
Prima di Windows Vista, la priorità del thread non influiva sulla velocità con cui le operazioni di I / O venivano completate. A partire da Windows Vista, anche gli I / O possono avere una priorità, che per impostazione predefinita deriva dalla priorità del thread.
Riepilogo: in gran parte non vedrai alcun effetto nel cambiare le priorità dei thread a meno che la tua CPU non sia pesantemente caricata, e anche allora l'effetto sarà in genere minimo. Se il processo deve attendere l'I / O o non è in contrasto con altri processi per il tempo della CPU, sta già eseguendo il più veloce possibile e cambiando priorità non lo renderà più veloce.