Kezdőoldal » Számítástechnika » Programozás » Többszálú programozás hogy...

Többszálú programozás hogy működik?

Figyelt kérdés
A több szálú programozás az az mikor egy programon belül egyszerre fut több minden? Pl.: Van az arkanoid nevű játék és azon belül egyszerre megy a golyó az irányítás és az óra ? Úgy értem hogy egyet lépek balra egyet mozog a golyó egyet az óra. Ehhez kell a function? Vagy hogy működik? Egyszerű példát tudtok írni? Én Turbo pascalban gyakorolgatok még.

2013. jan. 29. 00:44
1 2
 11/13 anonim ***** válasza:

Jesszus, amit itt összehordtatok az valami félelmetes.

Tisztázzunk valamit: a többszálúság és a többmagosság között nincs ok-okozati összefüggés.


Először a kérdező kérdésére a válasz:

- Azt kérdezted, hogy az Arkanoidban az irányítás, óra és golyó többszálú-e vagy sem. Hát nem. A legegyszerűbb úgy megcsinálni, ahogy leírtad: a program először begyűjti a billentyűzetről a meg(nem)nyomott gombok adatait, lépteti az ütőt, lépteti a golyót, vizsgálja az ütközéseket, ezek alapján felrajzolja a képet és a hangkártyának "megmondja" milyen hangot kezdjen lejátszani vagy megállítani.


A többszálúság és a többfeladatosság abban tér el, hogy a processzor belső feldolgozása hogyan működik:

- Többfeladatosság esetében a processzor-oprendszer (továbbiakban cpu és OS) képes együttműködve látszólag egy időben több programot futtatni.

Erre példa volt régen a Novell DOS nevű rendszere, ahol DOS programokat lehetett futtatni, egyszerre többet is, közöttük pedig billentyű kombinációval lehetett választani.

Ezek a programok egymásról nem tudnak, úgy futnak, mintha egyedül használnák a számítógépet: pl. az Excel és Word, egyik se törődik azzal, ha a másik fut.


- Többszálúság esetén viszont arról van szó, hogy a programon *belül* fog több alprogram futni, ami azért más, mert a több alprogram dolgozhat azonos adatokon (míg az excel-word példában nem). Az alprogramot az egyszerűség kedvéért hívjuk function-nak.


A szálak kezelése az OS dolga, ez dönti el, hogy több processzor mag esetében átkerülhet-e másik magra, ha csak egymagos a processzor, akkor nyilván ez fel sem merül.

A szálak futása nem kiszámítható, ami azt jelenti, hogy nem tudjuk egy adott pillanatban melyik fut. Erre mondok egy példát:


Legyen a feladat egy tömbben tárolt számok összeadása, az egyszerűség kedvéért legyen a tömb 100 elemű!

Ha írunk egy programot, ami összeszámolja a tömb elemeit, és mindezt 2 szálon teszi, akkor kb. ilyesmi lesz a program logikai felépítése.

Az első szál a tömb elemeit 1-50-ig adja össze, a második szál pedig az 51-100 elemek összegét számolja.

Ha készen vannak, akkor bevárják egymást (ezt nevezzük szinkronizálásnak) és visszaadják a vezérlést a főszálnak (ez az a szál, amelyik maga a program) ahol a két részösszeget össze kell adni és kiírni.

Ha a két szál kiírja, hogy éppen melyik elemmel foglalkozik, akkor valami ilyesmi lesz a program képernyőjén futás közben:

1. szál vagyok, 1. elemmel foglalkozom

2. szál vagyok, 51. elemmel foglalkozom

2. szál vagyok, 52. elemmel foglalkozom

1. szál vagyok, 2. elemmel foglalkozom

2. szál vagyok, 53. elemmel foglalkozom

1. szál vagyok, 3. elemmel foglalkozom

1. szál vagyok, 4. elemmel foglalkozom

1. szál vagyok, 5. elemmel foglalkozom

stb.

Ha lefuttatnánk másodszor is, akkor már nem a fenti kimenetet kapnánk, hanem valami mást, mert a szálak sorrendiségét az OS szabályozza, nem pedig mi.

A multiprogramozásnak nagyon sok buktatója van, mivel egyáltalán nem egyszerű a hibát megkeresni, a tömbös példa is ilyen (típusfeladat a diákoknak, ezen szépen lehet demonstrálni alapvető működési tulajdonságokat)


Turbo Pascalban szerintem nem fogsz többszálú programot írni - legalább is egyszerűen biztos nem. Ennek oka, hogy a TP még DOS alá készült, ami nem támogatta az ilyen programok készítését. Ha FreePascalt vagy Delphit használnál, akkor viszont sokkal egyszerűbb dolgod lenne.

(UPDATE: megnéztem és FreePascal támogatja a többszálú programok írását. Lásd: [link] )


Kérdésed van, ott a privát üzenet gomb, kérdezz bátran.

A fenti tömbös példa megoldását megkaphatod C#-ben megírva.

2013. jan. 29. 18:39
Hasznos számodra ez a válasz?
 12/13 anonim ***** válasza:

# 11/11 ma 18:39

A ma használt operációs rendszerek többsége nem szól bele abba, hogy programon belül hogyan van megoldva a többszálúság. A word exceles példád esetében az oprendszer dolgozik, a másikban általában az adott programozási nyelv/keretrendszer dolgozik általában.

2013. jan. 29. 19:43
Hasznos számodra ez a válasz?
 13/13 Srapnel ***** válasza:

# 11/12


Melyik részével van bajod annak, amit írtam?

2016. máj. 4. 11:54
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!