Multithreading - első lépések
Multithreading - első lépések
Amikor a multitestezés kérdését megérinti az interjú, rendkívül kényelmetlenül érzem magam. És nem azért, mert nem ismerem ezt a témát - hiszem, hogy jól értem. De a szent remegés és titokzatosság, amellyel ez a tudás ezen területe eltakart, bosszant engem. Mert bár nehéz, de érthető. De a tárgyalópartnerek teljesen különböző jelentéseket és sajátosságokat kereshetnek (és találhatnak). Nem érthetsz véleményt :).
Ha megérted, hogy pontosan mi okozza a komplexitást, és milyen eszközöket kínál Önnek, akkor a probléma már nem a többszálas feldolgozásban, hanem a feladatok kezelésének összetettségében. Népköltségünket több részre osztjuk:
- Miért kell multithreading?
- Szálak létrehozása
- Milyen problémák merülnek fel és miért
- Eszközök a problémamegoldáshoz
Teljesen elismerem, hogy az én megítélésem szubjektív, és néhány pillanat és finomság nem tud bele ebbe a leírásba. Egyszerűen azért, mert mélyebbre merülsz ebbe a problémába, annál érdekesebb pontokat találsz (a JVM megvalósítás szintjén vagy a processzor architektúránál). Szintén figyelembe kell venni, hogy a megoldandó feladatok természetét is érinti - végül is, a problémák megoldásakor minden korlátozás, a megvalósítás jellemzői és más trükkös pillanatok kereszteződnek.
Miért multithreading?
A kérdésre adott válasz nem jelent problémát. Napjainkban a kiszolgálórendszerek feldolgozóinak száma nagyobb, mint egy, és még egy processzor több magot tartalmaz. Elárulom ezt egy példával. Legyen óvatos - az osztály az edu.javacourse.threads csomagban van
Ne menj a részletekbe - csak futtasd ezt a csodálatos példát, de előtte azt tanácsolom, hogy elindítsa a feladatkezelőt, hogy láthassa a processzorok terhelését. Ez az, amit a képem van.
A streamek lehetővé teszik több feladat kézi végrehajtását egyetlen alkalmazáson belül. A legegyszerűbb formában mindig van egy fő szál egy alkalmazásban. Mindig. De magunknak további szálakat kell futtatnunk. És az indítás nem a legnehezebb. A legnehezebb dolog az, hogy együtt dolgozzanak. De később beszélünk erről. Addig is, csak tanulj meg szálak futtatását.
Szálak létrehozása
A szálak elindítása (mosolyoghat) van egy speciális osztály - Thread. Van még két interfész, de hogyan kell velük dolgozni, majd némileg később elemezzük. Írd be a legegyszerűbb alkalmazást, és részletesen elemezzük.
Először azt javaslom, hogy nézd meg a SimpleRunnable osztály kódját. Amint láthatjuk, ez nem különbözik nagymértékben az előző esettől - a különbség az, hogy nem öröklik a Thread osztályból. és végrehajtja a futható felületet. A felülbírált módszer pontosan ugyanaz, mint korábban. a különbségek minimálisak.
Most vegyünk figyelmet a SimpleThreadManager osztályra. Amint itt látunk, egy kicsit más áramlási trigger algoritmust használunk. Először létrehozunk egy SimpleRunnable objektumot. majd hozzon létre egy objektum osztály tárgyát. amely a kivitelezőben átmegy a tárgyunkon. És ezt követően kezdjük el a start módszert. Amikor a startot hívják, aThread osztály ellenőrzi, hogy a futó felületet végrehajtó objektum átadta-e a tervezőnek. Ha igen, akkor a futtatott objektum futási módja fut. Ha nem, a Thread objektum végrehajtja a futási módot. Általában is elég könnyű.
Meggondolhatod - és miért hozta létre az interfészt, ha van egy úgynevezett "Thread" nevű osztály. A válasz általánosan nyilvánvaló - szélsőséges rugalmassággal. Végül is, ebben az esetben minden osztály külön szálon futtatható. Ie létrehozhatunk egy osztályt egy komplex számításhoz - pl. a munkák jövedelmezőségének kiszámításához /
vásárlások stb. a szerződés alapján. Ez megy az adatbázisba, és néhány fájlt, esetleg külső kéréseket más rendszerekre. Általában - sokáig. És a 40-es darabokra vonatkozó szerződések. Most több szerződés számítását párhuzamosan is elkezdhetjük, és egyidejűleg ez a komplex osztály nem lehet a Téma örököse egyáltalán.
Paraméter átvitel
Házi feladatként próbáljon ki egy olyan űrlapot, amely "a képernyő körül" balról jobbra (vagy felülről lefelé) fut, és amikor eléri a határt, elkezdi az ellenkező irányba mozogni.
Most továbbléphetünk a többszálú elbeszélés következő részébe, amely a vérhullámos szörnyek világába vezet, amelyek több szálon dolgoznak együtt.
Köszönöm. Kiegészítettem a cikket - most azt tartalmazza, amit akartam. De a többszálú szöveg nem fog véget érni - sok érdekes dolog van.
Tehát a processzor maga választja ki, hogyan kell párhuzamosítani a folyamatokat egy többszálas környezetben?
Ott minden nagyon nehéz, és én magam nem tudok mindent pontosan elmondani. 🙂 Lényegében a szálak az operációs rendszer (Windows, Linux) tárgyai. A JVM szálakat hoz létre az operációs rendszer objektumaként, és bizonyos mértékig szabályozza azokat. De az operációs rendszer maga is ezt teszi, és ez az, hogy "betölti" a processzort feladatokkal és szálakkal.
Őszintén szólva - nem voltam olyan mélyen belevetve a JVM-be, hogy részletesebben válaszoljon. Teljesen elismerem, hogy még ebben a sorokban is összekevertem valamit.
Hello, kérlek, magyarázd el pontosan az első alkalmazást, ahol összehasonlítod a számításokat 1 szálon és többszálas formában. Különösen a BigTaskManyThreads osztály.
A szálak kezelése végül az operációs rendszer irányítása alatt áll, és a Linux különbözik a Windows operációs rendszertől. Tehát ilyen lehetőségek lehetségesek - a Linux megpróbálja nem hagyja, hogy az egyik folyamat nagy mértékben betöltse az összes processzort.
"Ezt a paramétert a konstruktornak nevezték el, de a beállító hívásokon keresztül is végrehajthatja azt (javaslom, hogy ezt az opciót hajtsa végre - könnyű)."
Könnyű, de a kezdőknek minden remény nélkül nélkülözhetetlen feladat, hogy elmélyítsék a megértést és megszilárdítsák a korábban követett anyagokat.
FONTOS. A lokalizálással kapcsolatban egy pont van - ha orosz betűket fogsz használni, akkor közvetlenül nem írhatsz.
Először is, ugyanazok a NetBeans automatikusan figyeli ezt a helyzetet. IDEA is - az igazság, amit ebben a helyzetben kell mondania.