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
 1/13 anonim ***** válasza:
nem kötelező több szálon, egy szálon, egymás után is el lehet végezni az irányítást meg az óra továbbléptetését
2013. jan. 29. 03:08
Hasznos számodra ez a válasz?
 2/13 anonim ***** válasza:

A több szál, ha nincs több magod, akkor azt jelenti, hogy nagyon-nagyon gyorsan váltja az operációs rendszer azt, hogy mit is csinál. Azt hiszem 4 ms egy-egy szál ideje, annyi van neki, aztán következő, ameddig újra sorra nem kerül, mindez olyan gyors, hogy te nem látod a különbséget, teljesen olyan, mintha folyamatos lenne. Ahhoz, hogy egy ténylegesen egy időben történjen több proceszormag kell, de éppen az olyan feladatoknál, mint amit fent írsz, érdemes threadekkel megoldani. Egy szálon figyelheted a billentyűleütést, egy másikkal kirajzoltatod ha van változás, és növelsz egy változót, ami az időd.


Turbo Pascalhoz nem értek annyira, a példát másra bízom :)

2013. jan. 29. 07:03
Hasznos számodra ez a válasz?
 3/13 Srapnel ***** válasza:
Megfelelő szálkezelő esetén az több magra osztja a threadeket, ha van több mag.
2013. jan. 29. 08:00
Hasznos számodra ez a válasz?
 4/13 anonim ***** válasza:

A több szálú programozás (multi-threading):

Egy programod ténylegesen egy processzoron fut, az operációs rendszer egy folyamatként kezeli. Maga a program váltogat különböző szálak között. (Tehát kvázi egy programon belüli multitasking rendszer). Ez az eljárás nem használ ki több processzormagot, csak a programozást egyszerűsíti le.


A többprocesszoros programozás (multi-processing, multitasking):

Ténylegesen több operációs rendszer folyamatot indítasz el, melyek valamiképp összedolgoznak. Fontos megjegyezni, hogy itt komoly tervezést igényel a memóriaelérés és az információcsere megoldása. Ennek akkor van értelme, ha ki szeretnéd használni a több processzor, vagy több magos processzor lehetőségeit. Jellemzően komolyan processzorigényes alkalmazásoknál használják.


Vannak emellett kombinált megoldások is, melyeket a multi-threadinghez hasonlóan egyszerű megoldani, viszont nem lehet 100%-ig kihasználni a több processzor, illetve más erőforrások nyújtotta lehetőséget.


Jellemzően egyszerűbb játékok esetén egyik megoldást sem érdemes használnod. Az a játék, amire te gondolsz, nem igényel nagy processzorteljesítményt, ebből fakadóan egy egyszerű egyszálú ciklus megteszi a vezérlés, megjelenítés, stb. megoldására.


Érdekesség megjegyezni, hogy a videokártyák egyfajta kombinált megoldást használnak. Ott nagyon-nagyon sok processzor dolgozik, és a legtöbb számításhoz jól ki lehet használni a több processzoros megoldást. Némely integrált videovezérlő képes a CPU teljesítményét is használni.

2013. jan. 29. 10:44
Hasznos számodra ez a válasz?
 5/13 iostream ***** válasza:

Több szál pl amikor Windowson dolgozik egy program mint az állat, és te mégis tudod közben mozgatni az ablakát.

A többszálú programozás úgy működik, hogy a programod több szálon fut. Az operációs rendszerek többsége ezt biztosítja, amikor ők maguk több programot futtatnak egyszerre, valamilyen időosztásos módszerrel ütemezve hogy mikor melyik processz melyik magon futhat. És ha már a külön processzeket tudja kezelni, miért ne tudná kezelni az egy processz több szálát?

Az a lényeg, hogy olyan, mintha két programod futna ugyanabban a memóriatérben. Ennek előnyeivel és hátrányaival.

2013. jan. 29. 10:48
Hasznos számodra ez a válasz?
 6/13 Srapnel ***** válasza:
Vegyünk egy hétköznapi példát. Hétvégi házimunkákat kell megcsinálni. Mondjuk el kell mosogatni, fel kell porszívózni, és főzni kell egy levest. Ezek a feladatok (task).
2013. jan. 29. 12:56
Hasznos számodra ez a válasz?
 7/13 Srapnel ***** válasza:

Folyt.:


"Egyszálú" esetben kitalálsz egy sorrendet, pl. porszívózás, főzés, mosogatás. A porszívózáshoz előveszed a porszívót, elpakolsz a földről, felporszívózol és elrakod a porszívót. Aztán előveszed a fűszereket, vizet, zöltséget pucolsz, stb. Megfőzöd a levest. Végül megnyitod a csapot és szépen mindent elmosogatsz.

2013. jan. 29. 12:58
Hasznos számodra ez a válasz?
 8/13 Srapnel ***** válasza:

Közben azonban látható, hogy ha így csinálod, akkor az egész napod elmegy az egészre, mert hát a mosogatásnál is, ha túl sok az edény és kicsi a szárító, meg kell várni, hogy egy adag megszáradjon. A főzésnél meg pláne vannak üresjáratok, mondjuk két keverés között. Ekkor kitalálod a többszálú házimunkavégzést:


Mind a három munkához kipakolsz (nem muszáj egyszerre), mondjuk a vizet épp nem hagyod megnyitva. Elkezdesz főzni, előpakolsz, stb. Viszont amíg a hagyma dinsztelődik, addig épp megnyithatod a vizet és mosogathatsz 1-2 poharat, vagy porszívózhatsz egy kisebb szobát. Aztán visszatérsz, keversz egyet, esetleg a zöldségeket elvagdosod. Ha közben megszáradtak a tányérok, akár mosogathatsz is. A kevergetések között viszont ki is tudsz porszívózni és el is tudsz mosogatni.

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

Az eredmény valójában az, hogy "egyszerre" takarítottál ki, mosogattál és még főztél is.


Ha van családod, párod, akkor csinálhatsz többmagú házimunkavégzést: a párod takarít és mosogat, te főzöl és pl. mosogatsz.


A példában a taskok az elvégzendő munkák, a szálak a munkák körülményei (kb.), a magok meg ti, akik a házimunkát végzitek.


A példa rengeteg nehzéségre is rámutat: minden task váltáskor a körülményeket úgy kell megváltoztatni, hogy az aktuális feladatot félbeszakítsd, az éppen átváltott feladatot meg folytatni tudd. Ilyesmi változtatások a víz elzárása, megnyitása, a kés letétele, felvétele, porszívó kikapcsolása, bekapcsolása, stb. Minél gyakrabban váltogatsz a feladatok között, annál nagyobb hányada megy el az időnek az előbbi átváltással kapcsolatos (valójában nem produktív) tevékenységekre. Ha meg minél ritkábban váltogatsz, annál kevésbé leszel hatékony. Azonban az is látszik, hogy nettó időnyerés akkor van, ha valamely feladatban van üresjárat.


Az erőforrások kezelése is látszik a példán. Ha pl. nem csak egyfélét, hanem kétfélét főzöl, akkor lehet, hogy az egyik edény mindkét étel készítéséhez kell, sőt, még el is kell mosogatni. Ekkor pl. az egyik kaja "várakozik" az edényre, amíg a másikat készíted benne. Ha több mag van, akkor azokat is össze kell hangolni, hiszen egy edényt nem mosogathatsz és főzhetsz benne levest egyszerre.

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

Még egy scenárió a példában: ugyanazt a taskot futtathatja két szál is! Ami azt jelenti, hogy mondjuk két tök egyforma levest főzöl. A task ugyanaz, hiszen a recept megegyezik, de a konkrét két leves különbözik! Lehet, az egyikben 2 fej hagyma van, a másikban meg 3, mert a recept ("pár fej" hagymát ír). A taskváltás (szálváltás) akkor történik, amikor az egyik levestől átmész a másikhoz, mert mondjuk mindkettőt kevergeted.


Ha két magon főzöl levest, akkor ketten készítetek egyszerre egy recept alapján a két külön kaját.

2013. jan. 29. 13:17
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, 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!