Gyakorlati alapok III.

A többszálú programozás alapjai (multithread)

 

Bevezetés

Kapcsolódó fejezetek

 

Bevezetés

 

Kezdetben minden program kizárólag szekvenciális végrehajtású volt. Persze tegyük hozzá, hogy a szekvencialitás a jelenlegi szoftver-, és hardverarchitektúrán még mindig meghatározó tényező. (Ez azonban már nem igaz a legújabb, kvantumszámítógépek esetében.)

 

A szekvencialitás nemcsak azt jelenti, hogy az utasítások egymás után, sorosan helyezkednek el, hanem ez (nyilvánvalóan) időbeli végrehajtási sorrendet is meghatároz. Az egyszerű, 1 processzoros PC-k korában sem hardver-, sem szoftverügyileg nem létezhetett olyan megoldás, hogy programutasítások egyidőben kerüljenek végrehajtásra. Ha ezt a felhasználó másképp érzékelte, akkor az csupán a processzorok egyre nagyobb teljesítményének volt köszönhető, hiszen ebben az esetben a programok végrehajtása még mindig szekvenciális maradt, ám a processzor a programok közti műveleti időt egyre gyorsabban tudta felosztani. Ezen időalapú programfelosztásnak talán a legtipikusabb algoritmusa a Round Robin...

 

www.informatika-programozas.hu

Forrás - Source: www.researchgate.net

 

...amelyet minden rendszerprogramozó (kötelezően) jól ismer. A szekvencialitás uralmát hardverügyileg a többmagos processzorok megjelenése, szoftverügyileg pedig a programozási nyelvek ilyen irányú felkészítése, valamint ezek kényes összehangolása törte meg.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A többszálú (multithread) működés tehát elméleti síkon -hasonlóan a többfeladatos (multitask) architektúrához-, azt jelenti, hogy valós időben egyszerre több feladat-program-szál fut. Mivel a multitask fogalma lényegét tekintve hasonló a multithread környezethez, a jelen fejezetcsomagban a multitask definíciójával tovább nem foglalkozunk.


Talán mondanom sem kell, hogy a JVM már régen felkészítésre került ilyen jellegű feladatok végrehajtására. A pontos működés leírásához azonban jobban el kéne mélyednünk a multithread-multitask rendszerprogramozási témájában, hiszen ez az alapvetően C-alapú operációs rendszerprogramozás és a JVM összehangolt együttműködésének eredménye.

 

www.informatika-programozas.hu - További információk!

Csak egy jellemző felvetés: a JVM láthatóan mélyen, de mégis “legfelül”, alkalmazásszinten üzemel a mindenkori operációs rendszer felett. A JVM képes multithread-programkódok előállítására, futtatására, menedzselésére (gondoljunk csak a Runtime osztályra), ám arról végül mégis kizárólag az operációs rendszer dönt, hogy a JVM-től érkező multithread-kéréseket, azaz a szálakat miként osztja el: valóban párhuzamosan több processzorra, vagy átirányítja soros végrehajtásra. A felvetést bonyolítja, hogy a kérés végrehajtása operációs rendszerfüggő lehet.

 

Természetesen minden háttérinformáció hasznos, de egy Java-oktatási anyagon belül ez nem annyira lényeges, mert a Javán keresztül sohasem leszünk képesek befolyásolni az operációs rendszert, sőt, működésébe mintegy “röntgenszerűen” belelátni sem.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Még továbblépve: a JVM speciális működése miatt tökéletesen mindegy, hogy milyen operációs renszer van alatta, mert éppen ebben rejlik a JVM erőssége: az alatta lévő szoftveres architektúrát tökéletesen elrejti.

 

Kapcsolódó fejezetek