Uvod v nit v Visual Basic

Če želite razumeti navoje v VB.NET, pomaga razumeti nekatere temeljne koncepte. Najprej je, da se navojem nekaj zgodi, ker ga operacijski sistem podpira. Microsoft Windows je prednostni večopravilni operacijski sistem. Del sistema Windows, imenovan načrtovalec opravil, pošlje procesorski čas vsem delujočim programom. Te majhne koščke procesorskega časa imenujemo časovne rezine. Programi niso odgovorni za to, koliko procesorskega časa dobijo, urnik opravil. Ker je teh časovnih rezin tako malo, se vam zdi iluzija, da računalnik počne več stvari hkrati.

Opredelitev niti

Navoj je en zaporedni tok krmiljenja.

Nekaj ​​kvalifikatorjev:

  • Niti je "pot izvedbe" skozi to telo kode.
  • Niti si delijo spomin, zato morajo sodelovati, da dosežejo pravi rezultat.
  • Nit ima podatke, specifične za nit, kot so registri, kazalec zlaganja in števec programov.
  • Proces je enotno telo kode, ki ima lahko veliko niti, vendar ima vsaj enega in ima en sam kontekst (naslovni prostor).

To so stvari na ravni montaže, toda to se lotite, ko začnete razmišljati o nitih.

instagram viewer

Multithreading vs. Večprocesiranje

Multithreading ni isto kot večjezložna vzporedna obdelava, vendar večberežno in večprocesno delovanje delujeta skupaj. Večina osebnih računalnikov ima danes procesorje, ki imajo vsaj dve jedri, navadni domači stroji pa imajo včasih do osem jeder. Vsako jedro je ločen procesor, ki lahko sam izvaja programe. Povečanje zmogljivosti dobite, ko OS različnim jedrom dodeli drugačen postopek. Uporaba več niti in več procesorjev za še večje zmogljivosti se imenuje paralelizem na ravni niti.

Veliko tega, kar je mogoče storiti, je odvisno od tega, kaj lahko naredijo operacijski sistem in procesorska strojna oprema vedno, kar lahko storite v svojem programu, in ne smete pričakovati, da boste lahko uporabljali več niti vse. Pravzaprav morda ne boste našli veliko težav, ki imajo koristi od več niti. Torej, ne izvajajte večreznega branja samo zato, ker je tam. Učinkovitost programa lahko preprosto zmanjšate, če ni dober kandidat za večnamensko branje. Tako kot primeri so video kodeki morda najslabši programi za večkratno branje, ker so podatki sami po sebi serijska. Strežniški programi, ki obdelujejo spletne strani, so morda med najboljšimi, ker so različni odjemalci sami po sebi neodvisni.

Vadba varnosti navojev

Za večkratno branje koda je potrebna zahtevna koordinacija niti. Subtilne in težko najdete napake so pogoste, ker morajo različni niti pogosto deliti iste podatke, tako da lahko podatke spreminja ena nit, kadar druga ne pričakuje. Splošni izraz za to težavo je "dirkaško stanje." Z drugimi besedami, lahko dva niti prideta v "dirko" za posodobitev istih podatkov, rezultat pa je lahko drugačen, odvisno od tega, katera nit "zmaga". Kot trivialni primer, predpostavimo, da kodirate zanko:

Če števec zanke "I" nepričakovano zgreši številko 7 in preide od 6 do 8 - vendar le nekaj časa -, bi to imelo katastrofalne učinke na karkoli zanke počnete. Preprečevanje takšnih težav se imenuje varnost navojev. Če program potrebuje rezultat ene operacije v poznejši operaciji, potem ni mogoče kodirati vzporednih procesov ali niti, da bi to storil.

Osnovne večrezilne operacije

Čas je, da ta previdnostni pogovor potisnete v ozadje in napišete nekaj večbesedne kode. Ta članek za preprostost trenutno uporablja aplikacijo Console. Če želite nadaljevati, zaženite Visual Studio z novim projektom aplikacije Console.

Primarni imenski prostor, ki ga uporablja multithreading, je sistem. Nize s imeni in razred Thread bodo ustvarili, zagnali in ustavili nove teme. V spodnjem primeru upoštevajte, da je TestMultiThreading delegat. To pomeni, da morate uporabiti ime metode, ki jo lahko pokliče metoda Thread.

V tej aplikaciji bi lahko izvedli drugi Sub, tako da ga preprosto pokličemo:

To bi celotno aplikacijo izvedlo serijsko. Prvi zgornji primer kode pa zažene podprogram TestMultiThreading in nato nadaljuje.

Primer rekurzivnega algoritma

Tu je večkratna aplikacija, ki vključuje izračun permutacij matrike s pomočjo rekurzivnega algoritma. Tu ni prikazana vsa koda. Niz permuniranih znakov je preprosto "1", "2", "3", "4" in "5." Tu je ustrezni del kode.

Opazite, da obstajata dva načina za klic podpoglavlja Permute (oba sta bila komentirana v zgornji kodi). Eden začne nit, drugi pa ga pokliče neposredno. Če ga pokličete neposredno, dobite:

Če pa vrnete nit in namesto tega zaženete podmnožek Permute, dobite:

To jasno kaže, da je ustvarjena vsaj ena permutacija, nato pa se glavni pod premik premakne naprej in konča, prikaže "Končano glavno", medtem ko se generirajo preostale permutacije. Ker zaslon prihaja iz drugega podhoda, ki ga kliče podpovezava Permute, veste, da je to del nove niti. To ponazarja koncept, da je nit "pot izvedbe", kot je že omenjeno.

Primer pogojev dirke

Prvi del tega članka je omenil dirkaško stanje. Tu je primer, ki prikazuje neposredno:

Takojšnje okno je pokazalo ta rezultat v enem preskusu. Druga preskušanja so bila različna. To je bistvo dirkaškega stanja.