/ Prioritizácia vlákien v vláknach - java, multithreading, súbežnosť

Prioritizácia vlákien v rámci vlákien - java, multithreading, súbežnosť

Predpokladajme, že máte program, ktorý spúšťa dve vlákna a a b, a b spustí ďalších desať vlastných vlákien. Má a zatiaľ čo dostanú polovicu dostupnej „pozornosti“ b a jej vlákna zdieľajú druhú polovicu, alebo zdieľajú všetky rovnako? Ak je predvolene odpoveď na druhú možnosť, ako by ste mohli dosiahnuť prvú možnosť? Vďaka!

odpovede:

2 pre odpoveď č. 1

a zatiaľ čo dostanú polovicu dostupnej „pozornosti“ b a jej vlákna zdieľajú druhú polovicu, alebo zdieľajú všetky rovnako?

Ani jedno. Podiel času prijatého každým vláknom je nešpecifikovaný a neexistuje spoľahlivý spôsob jeho ovládania v prostredí Java. Je na plánovači natívneho vlákna.

Ak je predvolene odpoveď na druhú možnosť, ako by ste mohli dosiahnuť prvú možnosť?

Nemôžete, spoľahlivo.

Jediná vec, ktorú musíte ovplyvniťrelatívne množstvá času, ktoré každé vlákno pobeží, sú priority vlákna. Ani tie nie sú spoľahlivé alebo predvídateľné. Javadocs jednoducho hovorí, že vlákno s vysokou prioritou sa vykonáva „radšej ako“ vlákno s nižšou prioritou. V praxi to závisí od toho, ako natívny plánovač vlákien zvládne priority.

Pre viac detailov: http://docs.oracle.com/javase/7/docs/technotes/guides/vm/thread-priorities.html ... ktorý obsahuje informácie o tom, ako priority vlákien na rôznych platformách a verziách Java.


5 pre odpoveď № 2

O tejto téme je veľa peknej dokumentácie. Jeden taký je toto.

Keď je vytvorené vlákno Java, dedí svoju prioritu z vlákna, ktoré ho vytvorilo. Môžete tiež zmeniť prioritu vlákna kedykoľvek po jeho vytvorení pomocou setPriority () metóda. Priority vlákna sú celé čísla v rozmedzí od MIN_PRIORITY a MAX_PRIORITY (konštanty definované v triede Thread). Čím vyššie je celé číslo, tým vyššia je priorita. Kedykoľvek je pripravených na vykonanie viac vlákien, bežecký systém zvolí pre spustenie vlákno „Spustiteľný“ s najvyššou prioritou. Iba keď sa dané vlákno z nejakého dôvodu zastaví, vydá alebo sa stane „nespustiteľným“, vlákno s nižšou prioritou sa začne vykonávať. Ak čakajú na CPU dve vlákna s rovnakou prioritou, plánovač zvolí jedno z nich, aby bežalo spôsobom každý s každým. Zvolené vlákno bude fungovať, kým nebude splnená jedna z nasledujúcich podmienok:

  1. Vlákno s vyššou prioritou sa stáva „Spustiteľné“.
  2. Poskytuje výťažok alebo jeho metóda run () končí.
  3. V systémoch, ktoré podporujú časové rozdelenie, vypršalo jeho pridelenie času.

V každom okamihu je vlákno s najvyššou prioritoubežiaci. Nie je to však zaručené. Plánovač vlákien sa môže rozhodnúť spustiť vlákno s nižšou prioritou, aby zabránil hladovaniu. Z tohto dôvodu používajte prioritu iba na ovplyvnenie politiky plánovania z dôvodu efektívnosti. Pre správnosť algoritmu sa nespoliehajte na prioritu vlákna.</ Strong>


0 pre odpoveď č. 3

Nemožno s istotou povedať, v akom poradívlákna sa vykonajú. Program Thread Scheduler funguje podľa zabudovaného algoritmu, ktorý však nemôžeme zmeniť. Plánovač vlákien vyberie všetky vlákna (vlákna s najvyššou prioritou) z spustiteľného fondu a zaistí ich spustenie. Môžeme len spomenúť prioritu, v ktorej by plánovač mal spracovávať naše vlákna.