Čo je to súbežnosť v Jave? - Kompletný Sprievodca súbežnosťou v Jave

Obsah:

Anonim

Čo je to súbežnosť v Jave?

V dnešnom svete sa všetko rýchlo vyvíja. V každom a vo všetkom je vždy priestor na zlepšenie. To platí aj pre náš programovací jazyk. Dnes s našimi modernými technológiami očakávame, že sa veci budú robiť ľahko a rýchlo. Za to, že robíte viac vecí naraz alebo za to, že robíte niekoľko vecí súčasne, vznikol koncept súbežnosti. Čo vlastne je súbežnosť, aké je jej použitie, prečo je to skutočne potrebné a mnoho ďalších. Pokúsime sa dotknúť týchto otázok a odpovedať na ne v tomto článku jeden po druhom. Poďme teda svoju diskusiu na veľmi základnú spoločnú časť, ktorá je definíciou súbežnosti. V tejto téme sa dozvieme viac o tom, čo je súbežnosť v Jave.

Definícia súbežnosti?

Aká je vlastne súbežnosť? Aby som na to odpovedal, urobme spoločný scenár. Predpokladajme, že pri čítaní tohto článku sa snažíte robiť viac vecí súčasne, môže to byť aj preto, že sa snažíte urobiť poznámku, možno sa snažíte jej porozumieť alebo si rozmyslieť nejaké veci. Jednoducho povedané, snažíte sa robiť viac vecí súčasne. To znamená súbežnosť. Súbežnosť je jednoduché vykonávanie viacerých úloh súčasne. V tomto článku budeme diskutovať o súbežnosti v rozsahu Java ako programovacieho jazyka.

V Jave alebo všeobecne v akomkoľvek programovacom jazyku je to práve vlákno, ktoré je zodpovedné za prenášanie súbežnosti. Základnou úlohou týchto vlákien je uľahčenie súbežného vykonávania úloh. Medzitým si dajte základnú definíciu vlákna.

Čo je vlákno?

Vlákno je ľahký proces s vlastným zásobníkom hovorov. Vlákno má však privilégium na prístup k zdieľaným údajom z iných vlákien vykonávaných v rámci toho istého procesu. V rámci Java aplikácie môžeme použiť veľa vlákien na dosiahnutie paralelného spracovania alebo súbežnosti.

Teraz prejdime k ďalšej téme, ktorou je,

Súbežnosť v definícii jazyka Java?

Takže v jazyku Java alebo v akomkoľvek inom programovacom jazyku, ako je C # atď., Má celý jazyk OOP koncepciu závitovania. V Jave máme rôzne procesy, ktoré sa spúšťajú vytváraním rôznych vlákien na dosiahnutie súbežnosti

Po tejto jednoduchej definícii teda diskutujme o našej novej téme, ktorá je:

Čo robí súbežnú aplikáciu java?

Prvou triedou, ktorú je potrebné urobiť súbežne s aplikáciou java, je java.lang.Thread class. java.lang.Thread class je zodpovedná za všetky koncepty súbežnosti v programovacom jazyku Java. Potom máme rozhranie java.lang.Runnable, ktoré oddeľuje správanie vlákna z triedy vlákien.

Ďalšia trieda, ktorú budeme potrebovať na vytvorenie pokročilej aplikácie, sa použije z balíka java.util.concurrent pridaného do jazyka Java 1.5.

Teraz sme dosiahli novú otázku, ktorá je:

Je Java Concurrency skutočne taká jednoduchá?

Zdá sa, že implementácia súbežnosti v Jave je pomerne jednoduchá. To však v skutočnosti nie je. Pozrime sa na to.

Naša predchádzajúca diskusia vo všeobecnosti vyvoláva dojem, že súbežnosť je skutočne jednoduchá, dobrá koncepcia a je pomerne ľahko realizovateľná. Ak budeme monitorovať lepším spôsobom a pokúsime sa ho pochopiť, zistíme, že to vyžaduje dobré pochopenie základných pojmov, ako aj dôkladné pochopenie toho, čo musíme dosiahnuť.

Ak porovnáme súbežné aplikácie a jednovláknové aplikácie, zistíme, že súbežná aplikácia je zložitá z hľadiska navrhovania a porozumenia. Kód vykonávaný viacerými vláknami vyžaduje osobitnú pozornosť a prostriedky na prístup k zdieľaným údajom. Chyby objavujúce sa kvôli nesprávnej synchronizácii vlákna sú ťažko laditeľné a opraviteľné. Tiež vo väčšine scenárov tieto chyby nie sú identifikované v počiatočnej fáze, v skutočnosti sa detegujú v prod režime, ktorý je ešte ťažšie reprodukovať.

Popri chybách a bežných chybách si súbežné vlákna vyžadujú viac prostriedkov na spustenie aplikácie

Problémy a zlepšenie súbežnosti - vysvetlenie s príkladom

V zásade existujú dva typy problémov, ktoré sa vyskytujú v dôsledku súbežnosti. Tieto problémy možno vo všeobecnosti rozdeliť do dvoch kategórií

  • Chyby rušenia nití
  • Chyby konzistencie pamäte

Pochopme každý jeden po druhom

Chyby rušenia nití - Porozumejeme jednoduchým príkladom.

Predpokladajme, že máme funkciu počítadla, ktorej základnou úlohou je zvýšiť počet počítadiel alebo počet. Teraz predpokladajme, že máme dve vlákna, vlákno A a vlákno B. Predpokladajme, že vlákno A číta počiatočnú hodnotu ako 0. Teraz nasledujúce kroky prebiehajú postupne.

  1. Vlákno A číta počiatočnú hodnotu ako 0
  2. Vlákno B číta počiatočnú hodnotu ako 0
  3. Vlákno Zvýšenie hodnoty o 1. Nová hodnota je teraz 1
  4. Vlákno B tiež zvyšuje hodnotu na 1.
  5. Vlákno A zapíše aktualizovanú hodnotu, ktorá je 1, do pamäťovej bunky
  6. Vlákno B tiež opakuje ten istý krok, ktorý je zapísaný v aktualizovanej hodnote 1 pamäťovej bunky

Takže tu vzniká problém. Dva vlákna A a B, vykonajte kód dvakrát a očakávaná hodnota je 2, ale to, čo sa odráža, je 1. Toto je hlavný problém, ktorý by mohol spôsobiť viacero vlákien.

Ako sa to dá vyriešiť?

Chyby interferencie vlákna sa dajú vyriešiť synchronizáciou prístupu k zdieľaným premenným. Musíme aktualizovať aktualizované hodnoty medzi zdieľanými údajmi

Pozrime sa na druhý typ chyby

Chyby konzistencie pamäte

Chyby nekonzistencie pamäte sa zvyčajne vyskytujú, keď sa rôzne vlákna pokúšajú čítať alebo majú nekonzistentné pohľady na ten istý údaj. Zvyčajne sa to stane, keď prvé vlákno aktualizuje niektoré zdieľané údaje a táto aktualizovaná hodnota nie je šírená do druhého alebo iného vlákna a číta staré údaje.

Uvidíme, prečo sa to stalo?

Mohlo by to mať veľa príčin. Kompilátor zvyčajne robí veľa optimalizácií aplikácie, aby zlepšil výkon. Môže tiež aktualizovať postupnosti pokynov s cieľom optimalizovať výkon. Dokonca aj všeobecne sa spracovatelia pokúšajú optimalizovať kódy, napríklad procesor môže namiesto hlavnej pamäte čítať aktuálnu hodnotu premennej z vyrovnávacej pamäte alebo dočasného registra.

Záver - Čo je to súbežnosť v Jave?

Súbežnosť je veľmi dôležitou vlastnosťou akéhokoľvek jazyka OOP. Threading nám poskytuje funkciu na vykonávanie viacerých procesov paralelne k sebe. Pomáha nám to rýchlejšie vykonávať našu komplexnú úlohu. Avšak s výhodami má súbežnosť aj niekoľko nevýhod. Používanie závitov spôsobuje veľké využitie zdrojov

Odporúčané články

Toto bol Sprievodca tým, čo je súbežnosť v Jave. Tu sme s príkladom diskutovali problémy a zlepšovanie súbežnosti. Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. Čo je multithreading v jave?
  2. Ako pripojiť databázu v jazyku Java?
  3. Čo je multithreading v jave?
  4. Čo je J2EE?