2009-11-02 6 views

risposta

65

Un thread di priorità in tempo reale non può mai essere Preceduto da interrupt timer e corre con una priorità più alta rispetto a qualsiasi altro thread nel sistema . Poiché tale thread prioritario in tempo reale legato alla CPU può rovinare totalmente una macchina.

Creazione di thread di priorità in tempo reale richiede un privilegio (SeIncreaseBasePriorityPrivilege) in modo che possa essere eseguito solo dagli utenti amministrativi.

Per Vista e oltre, un'opzione per le applicazioni che richiedono di essere eseguite su priorità in tempo reale consiste nell'utilizzare lo Multimedia Class Scheduler Service (MMCSS) e lasciare che gestisca la priorità dei thread. MMCSS impedirà alla tua applicazione di usare troppo tempo della CPU, quindi non dovrai preoccuparti di tankare la macchina.

+4

Potrebbe essere pericoloso per il sistema mettere un singolo processo casuale (come un videogioco) in priorità in tempo reale? Sarebbe raccomandata un'alta priorità/ci sarebbe un notevole calo delle prestazioni per quella applicazione? – mrfred

+9

@mrfred Non direi che è pericoloso, solo che rallenta l'intero sistema se è un programma di grandi dimensioni. Prova a impostare la priorità di Minecraft su Realtime. Fidati di me, è divertente. Il tuo mouse rallenta, i tasti impiegano 5 secondi per rispondere e explorer.exe non risponde! –

+1

@mrfred Personalmente ho eseguito skyrim su priorità alta e in tempo reale per mesi alla volta, e ha reso il gioco molto più scorrevole, con solo occasionalmente artefatti audio (per qualsiasi motivo). Non ho mai avuto problemi a farlo ... Suppongo che il sistema si surriscalderebbe almeno se qualcosa andasse terribilmente storto, ma naturalmente, non so davvero cosa potrebbe andare storto. Forse avere più core neutralizza la fame di risorse verso IO device, ecc. – Totem

22

Semplicemente, la classe di priorità "Tempo reale" è superiore alla classe di priorità "Alta". Non penso ci sia molto di più in questo. Oh sì - devi avere il SeIncreaseBasePriorityPrivilege per mettere un thread nella classe Real Time.

Windows a volte aumenta la priorità di un thread per vari motivi, ma non aumenta la priorità di un thread in un'altra classe di priorità. Inoltre non aumenterà la priorità dei thread nella classe di priorità in tempo reale. Quindi un thread con priorità alta non otterrà alcun incremento temporaneo automatico nella classe di priorità in tempo reale.

capitolo di Russinovich "Inside Windows" a modo in cui Windows gestisce priorità è una grande risorsa per imparare come funziona:

Nota che non c'è assolutamente nessun problema con un filo di avere un vero -time priorità su un normale sistema Windows - non sono necessariamente per processi speciali in esecuzione su macchine dedicate. Immagino che i driver e/o i processi multimediali possano necessitare di thread con priorità in tempo reale. Tuttavia, un thread di questo tipo non dovrebbe richiedere molta CPU, dovrebbe bloccarsi la maggior parte del tempo in modo che i normali eventi di sistema possano essere elaborati.

+6

Sì, i thread in tempo reale sono appropriati se si dispone di un thread che non ha molto da fare ma * ha bisogno * di avere buoni tempi di risposta. – Artelius

+0

So che so che è un vecchio post ma ho trovato il capitolo del libro davvero bello ... mi ha fatto andare! https://www.google.ca/search?q=C04X1116607.pdf&ie=utf-8&oe=utf-8&gws_rd=cr&ei=cSTqVJzQNvHnsATun4CIDA#q=X1116607.pdf – MotherDawg

12

Sarebbe la più alta impostazione di priorità disponibile e di solito dovrebbe essere utilizzata solo sulla casella dedicata all'esecuzione di quel programma specifico. In realtà è abbastanza alto da causare l'inedia della tastiera e dei fili del mouse nella misura in cui non rispondono.

Quindi fondamentalmente, se si deve chiedere, non usarlo :)

+0

Concordato. È importante sapere cosa significa (la massima priorità è data a quel thread, sopra ogni altra cosa), ma se mai ti troverai a chiedere se dovresti usarlo, non dovresti assolutamente farlo. –

+3

come imparerai ad usarlo se non chiedi come usarlo?Immagino che tu possa usarlo e vedere cosa succede poi imparerai ma sento il tuo scoraggiante apprendimento – fifamaniac04

2

In tempo reale è la priorità massima classe disponibile per un processo. Pertanto, è diverso da "Alto" in quanto è un gradino più grande e "Above Normale" in quanto è più grande di due.

Analogamente, in tempo reale è anche un livello di priorità del thread.

La priorità del processo classe aumenta o riduce tutte le priorità del thread effettive nel processo ed è pertanto considerata la 'priorità di base'.

Così, un processo ha una:

  1. processo di Base classe di priorità.
  2. Priorità thread individuali, offset della classe di priorità di base.

Poiché si suppone che il tempo reale sia riservato per le applicazioni che devono assolutamente prevenire altri processi in esecuzione, esiste un privilegio di protezione speciale per proteggerlo da un uso casuale di esso. Questo è definito dalla politica di sicurezza.

In NT6 + (Vista +), l'utilizzo di Vista Multimedia Class Scheduler è il modo corretto per ottenere operazioni in tempo reale in quello che è non un sistema operativo in tempo reale. Funziona, per la maggior parte, anche se non è perfetto poiché il sistema operativo non è progettato per operazioni in tempo reale.

Microsoft considera questa priorità molto pericolosa, giustamente. Nessuna applicazione dovrebbe usarlo se non in circostanze molto specializzate, e anche in questo caso cercare di limitare il suo utilizzo a esigenze temporanee.

1

Una volta che Windows ha appreso che un programma utilizza una priorità più alta del normale, sembra che limiti la priorità del processo.

L'impostazione della priorità da IDLE a REALTIME NON modifica l'utilizzo della CPU.

Ho trovato sulla mia CPU AMD multiprocessore che se si rilascia una delle CPU come l'ULTIMO, l'utilizzo della CPU sarà MAX OUT e l'ultima CPU rimane inattiva. La velocità del processore aumenta fino al 75% sul mio Quad AMD.

Utilizzare Task Manager-> selezionare processo-> Fare clic con il tasto destro del mouse sul processo-> Seleziona-> Imposta affinità Fare clic su tutto tranne l'ultimo processore. L'utilizzo della CPU aumenterà fino al MAX sui processori rimanenti e sui Conteggi fotogrammi se l'elaborazione del video aumenterà.

+1

Hai ragione, il fatto che la modifica della classe di priorità del processo non influenzi l'utilizzo della CPU, a patto che non ci sia conflitto per la CPU. MA, ti stai sbagliando pensando che Windows limiti le priorità massime di processo in base all'utilizzo della CPU. Invece, un privilegio di sicurezza protegge dall'impostazione di "tempo reale" per impedire l'uso casuale. –

+0

(lettura anni dopo) - Il problema qui è che i thread non possono essere divisi. Quindi, potresti avere 8 core, ma solo 2 thread legati alla CPU (attivi al 100%). Quindi dici "Perché non vengono utilizzati i miei altri 6 core?". Oppure, nel tuo caso, "Perché il mio ultimo nucleo non viene utilizzato?". I nuclei rimanenti sembreranno non fare nulla. Ed è così che lo vuoi Se il thread venisse scambiato da core a core, diminuirebbe le prestazioni. Lo sviluppatore di app deve eseguire il multi-thread e non tutto può essere multi-thread. –

0

Fondamentalmente è maggiore/maggiore in tutto il resto. Una tastiera è meno prioritaria rispetto al processo in tempo reale. Ciò significa che il processo verrà preso in considerazione più velocemente della tastiera e se non può gestirlo, la tua tastiera sarà rallentata.

0

Come tutte le altre risposte prima del tempo reale, questo programma rappresenta la massima classe di priorità. Niente viene elaborato fino a quando il programma non è stato elaborato.
Sulla mia macchina Pentium 4 ho impostato molto minecraft in tempo reale poiché aumenta notevolmente le prestazioni del gioco e il sistema sembra completamente stabile. così realtime non è così male come sembra, solo se hai un set multi-core affinità di un programma per un core o core specifici (solo non tutti, solo per lasciare che tutto il resto sia in grado di eseguire nel caso in tempo reale imposta i programmi si blocca) e imposta la priorità in tempo reale.