Java logoPredDalej

Co je to thread ?

Ti z vas, ktori pracujete a hlavne programujete pod skutocnymi operacnymi systemami (UNIX, pripadne WinNT, OS2), urcite poznate tento pojem. Upresnim, ze skutocny OS je taky, kde existuje niekolko beziacich uloh sucasne. Vsetko, co bude napisane dalej, sa tyka takychto operacnych systemov.
Pseudodefinicia threadu moze vyzerat nasledovne:

Thread je sekvencia prikazov (funkcii, metod) v programe, ktora sa vykonava "nezavisle" od ostatnych casti programu.

Nie je to velmi presne (a asi ani vystizne). Znamena to, ze samostatny proces moze byt dalej delitelny a vykonavany paralelne (ak je to ziadane). Dolezite je aj to, aby sme si nezamienali pojmy proces a thread. Pochopit rozdiel medzi jednym a druhym je velmi dolezite. Na thread by sa dalo pozerat ako na kvazy-proces, ktory je vacsinou podstatne jednoduchsi ako proces. V zasade plati, ze proces a thread neexistuju jeden bez druheho. V skutocnosti kazdy proces ma aspon jeden thread. Prikladom by mohol byt unixovsky shell, co nie je nic ine, ako proces cakajuci na prikazy od uzivatela a zaroven moze vlastnit podprocesy. Napr. ak sme dali prehladavat suborovy system prikazom
find . -name meno_subora -print &
potom nas shell spustil dcersky proces, ktory zabezpeci prehladanie suboroveho systemu. Tymto sposobom mame pocas prehladavania v pamati nasledujucu zostavu procesov:
ksh -- [find . -name meno_subora -print &]
    +- ps
Vypis sme ziskali pomocou prikazu ps (to je ten druhy riadok). Myslim, ze nema dalej vyznam sa uberat tymto smerom, pretoze vsetky tieto veci najdete asi v kazdej knihe o Unixe. Odporucam si to ale vyskusat a vsimnite si, ze ps vypise aj stav, v ktorom sa proces nachadza.

Ak by sme chceli na tomto mieste riesit problem sliepky a vajca, urcite by platilo, ze prvy bol proces a az potom thread. (poznamka k vzajomnemu prepojeniu threadu a procesu) Netreba sa ani hlboko zamysliet, co bolo skor, ci sliepka alebo vajce, pretoze pri softweri je to jednoznacne, detto ak mate len jeden procesor.

Priklad - operacie nad maticami.

Velmi dobrym prikladom su operacie nad maticami. Pouzit thready ma opodstatnenie hlavne na viacprocesorovych systemoch, kde kazda poduloha moze bezat na samostatnom procesore. Samozrejme, ze thready maju vyznam aj v jednoprocesorovom systeme. Napriklad ak chceme scitat jednotlive riadky matice cca 10000x10000, potom mozeme ulohu scitania rozdelit medzi jednotlive procesory. Cize vytvorime zopar threadov, ktore budu postupne scitavat jednotlive riadky. Schematicky to znazornime takto:

Priklad pre maticu 2x2 a dva thready.

Polemiku, ci su thready potrebne alebo nie najdete v kapitole Thready ano/nie.
zaciatok