„Visual Basic“ įvedimas

Norėdami suprasti sriegį VB.NET, jis padeda suprasti kai kurias pagrindų sąvokas. Pirmiausia, kad sriegimas yra kažkas, kas atsitinka, nes operacinė sistema tai palaiko. „Microsoft Windows“ yra prevencinė daugiafunkcinė operacinė sistema. Dalis „Windows“, vadinama užduočių planuokliu, nusako procesoriaus laiką visoms vykdomoms programoms. Šie maži procesoriaus laiko gabaliukai vadinami laiko dalimis. Programos neatsako už procesoriaus laiko sunaudojimą, nes tai užduočių planavimo priemonė. Kadangi šie laiko tarpai yra tokie maži, susidaro iliuzija, kad kompiuteris daro kelis veiksmus vienu metu.

Gijos apibrėžimas

Siūlas yra vienas po kito einantis valdymo srautas.

Keli kvalifikaciniai dalyviai:

  • Siūlas yra „vykdymo kelias“ per tą kodą.
  • Siūlai dalijasi atmintimi, todėl jie turi bendradarbiauti, kad gautų teisingą rezultatą.
  • Gija turi konkrečiam sriegiui reikalingus duomenis, tokius kaip registrai, rietuvės rodyklė ir programos skaitiklis.
  • Procesas yra vienas kodo rinkinys, kuriame gali būti daug gijų, tačiau jis turi bent vieną ir turi vieną kontekstą (adreso erdvę).
instagram viewer

Tai yra surinkimo lygio dalykai, tačiau į tai jūs patenkate, kai pradedate galvoti apie siūlus.

Daugiasluoksnis vs. Daugiaprocesinis apdorojimas

Daugiasluoksnis nėra tas pats, kaip daugiagyslis lygiagretusis apdorojimas, tačiau daugiasriegiai ir daugiaprocesiniai procesai veikia kartu. Šiandien daugumoje asmeninių kompiuterių yra procesoriai, turintys bent du branduolius, o įprastos namų mašinos kartais turi iki aštuonių branduolių. Kiekvienas branduolys yra atskiras procesorius, galintis paleisti programas pats. Jūs gaunate našumo padidėjimą, kai OS skirtingiems branduoliams priskiria skirtingą procesą. Kelių gijų ir kelių procesorių naudojimas dar didesniam našumui vadinamas gijų lygio lygiagretumu.

Daug ką galima padaryti, priklauso nuo to, ką gali padaryti operacinė sistema ir procesoriaus aparatinė įranga visada tai, ką galite padaryti savo programoje, ir neturėtumėte tikėtis, kad galėsite naudoti keletą gijų viskas. Tiesą sakant, galbūt nerasite daug problemų, kurioms naudingos kelios gijos. Taigi neįdiegkite daugybinio siuvimo vien dėl to, kad jis yra. Galite lengvai sumažinti savo programos našumą, jei ji nėra tinkama daugialypės terpės kandidatė. Kaip pavyzdžiai, vaizdo kodekai gali būti blogiausios daugiapakopės programos, nes duomenys yra iš prigimties serijinis. Serverių programos, tvarkančios tinklalapius, gali būti geriausios, nes skirtingi klientai iš esmės yra nepriklausomi.

Praktinis gijų sauga

Daugiasriegis kodas dažnai reikalauja sudėtingo gijų koordinavimo. Subtilūs ir sunkiai randami trikdžiai yra įprasti, nes skirtingose ​​gijose dažnai turi būti naudojami tie patys duomenys, todėl duomenis viena gija gali pakeisti, kai kitos nesitiki. Bendras šios problemos terminas yra „lenktynių būklė“. Kitaip tariant, abi gijos gali patekti į „lenktynes“ atnaujinti tuos pačius duomenis, o rezultatas gali skirtis priklausomai nuo to, kuri gija „laimi“. Tarkime, kad trivialus pavyzdys, jūs koduojate kilpą:

Jei kontūro skaitiklis „I“ netikėtai praleis skaičių 7 ir pereis nuo 6 iki 8 (bet tik tam tikrą laiką), tai turės pražūtingą poveikį visoms kilpoms, kurias daro. Tokių problemų prevencija vadinama siūlų sauga. Jei programai reikia vienos operacijos rezultato vėlesnėje operacijoje, tada gali būti neįmanoma užkoduoti lygiagrečius procesus ar gijas, kad tai padarytumėte.

Pagrindinės daugiasluoksnės operacijos

Laikas nustoti šį atsargumo principą aptarti fone ir parašyti keletą daugialypių kodų. Šiame straipsnyje šiuo metu naudojama konsolės programa, skirta paprastumui. Jei norite sekti kartu, pradėkite „Visual Studio“ su nauju konsolių programos projektu.

Pagrindinė vardų sritis, naudojama daugiasriegių, yra sistema. Temų vardų sritis ir temų klasė sukurs, paleis ir sustabdys naujas gijas. Žemiau pateiktame pavyzdyje atkreipkite dėmesį, kad „TestMultiThreading“ yra atstovas. T. y., Jūs turite naudoti metodo, kurį gali vadinti „Thread“ metodas, pavadinimą.

Šioje programoje mes galėtume įvykdyti antrąją „Sub“ versiją, tiesiog ją paskambinę:

Tai būtų įvykdę visą programą nuosekliai. Pirmasis aukščiau pateiktas kodo pavyzdys paleidžia paprogramę „TestMultiThreading“ ir toliau tęsia.

Rekursyvus algoritmo pavyzdys

Čia yra daugelio siūlų programa, apimanti masyvo permutacijų apskaičiavimą naudojant rekursinį algoritmą. Čia nerodomas visas kodas. Persirengiamų simbolių masyvas yra tiesiog „1“, „2“, „3“, „4“ ir „5“. Štai tinkama kodo dalis.

Atminkite, kad yra du būdai, kaip paskambinti „Permute“ poskyriui (abu komentuoti aukščiau esančiame kode). Vienas atmuša siūlą, o kitas pašaukia tiesiai. Jei paskambinsite tiesiogiai, gausite:

Tačiau, jei jūs atšauksite siūlą ir vietoj jo paleisite „Permute“, gausite:

Tai aiškiai parodo, kad sugeneruojama bent viena permutacija, tada pagrindinis poslinkis juda į priekį ir baigiasi, rodomas „Baigtas pagrindinis“, o likusios permutacijos generuojamos. Kadangi ekranas kilęs iš antrosios dalies, kurią vadina submutacija Permute, žinote, kad tai taip pat yra naujoji gija. Tai iliustruoja sampratą, kad gija yra „vykdymo kelias“, kaip minėta anksčiau.

Rasės sąlygų pavyzdys

Pirmojoje šio straipsnio dalyje buvo paminėta lenktynių būklė. Štai pavyzdys, parodantis tai tiesiogiai:

Tiesioginis langas parodė tokį rezultatą vieno bandymo metu. Kiti bandymai buvo skirtingi. Tai ir yra lenktynių sąlygos esmė.

instagram story viewer