Kaip klonuoti standųjį diską
Šiuolaikiniame skaitmeniniame amžiuje, kai duomenys yra vertingas turtas, kietojo disko klonavimas sistemoje „Windows“ daugeliui gali būti labai svarbus procesas. Šis išsamus vadovas
Istoriškai visos kompiuterinės programos buvo parašytos visiškai nuosekliai. Tai lengva skaityti, rašyti ir suprasti. Tai taip pat paprasta kompiuteriui vykdyti ir jai reikalinga gana paprasta aparatinė įranga. Naudojant šią dizaino paradigmą, vieninteliai du būdai padidinti sistemos našumą yra rašyti efektyvesnį kodą ir padidinti procesoriaus greitį. Gali būti įmanoma padidinti kodo efektyvumą, tačiau paprastai tai sudėtingas procesas, kurio rezultatai dažnai būna riboti.
Dešimtmečius našumas gali būti sumažintas laukiant naujų, efektyvesnių procesorių. Kaip aprašyta Moore'o įstatyme, procesorių našumas maždaug padvigubėja kas dvejus ar trejus metus. Deja, dauguma šių našumo padidėjimų atsirado naudojant vis mažesnius gamybos mazgus. Dėl materialinių sunkumų dirbant nanometrų mastu, šiuolaikinės technologijos stengiasi sumažinti mazgo dydį istoriniu greičiu.
Norėdami tai išvengti, šiuolaikiniai procesorių architektai pasirinko pridėti kelis procesoriaus branduolius prie CPU. Kiekvienas procesoriaus branduolys gali savarankiškai atlikti skirtingą užduotį. Nors jie negali sujungti tos pačios problemos, jie gali vienu metu spręsti dvi problemas. Šis esminis architektūrinis pakeitimas suteikia daug papildomo našumo, tačiau jis neduoda tiesioginės naudos atskiriems procesams, nors sumažina ginčą dėl procesoriaus laiko.
Norint pasinaudoti kelių branduolių procesoriais, kodas turi būti parašytas kelių gijų būdu. Tada kiekvieną giją galima paleisti vienu metu, našumo pranašumą padidinant pagal galimų gijų ir procesoriaus branduolių skaičių. Tačiau tai darant susiduria su nauju iššūkiu, „lenktynių sąlyga“.
Pastaba: kai kurios užduotys negali būti kelių gijų, o kitos gali būti labai kelių gijų. Galima našumo nauda priklauso nuo atliekamo darbo.
Lenktynių sąlygos
Kelių gijų programinė įranga gali pasinaudoti kelių branduolių pranašumais. Tuose vandenyse tyko pavojai, pasiruošę sugauti nepatyrusį programuotoją. Lenktynių sąlyga gali atsirasti, kai dvi skirtingos gijos sąveikauja su tuo pačiu atminties bitu.
Paprastas pavyzdys galėtų būti dvi gijos, bandančios patikrinti ir padidinti kintamąjį vienu metu. Tarkime, kad a=0 . Tada dvi skirtingos gijos atlieka savo funkcijas ir tam tikru momentu patikrina a ir padidina ją vienu. Paprastai galima tikėtis, kad dviejų gijų, pridedant vieną prie nulio, rezultatas bus du. Dažniausiai taip turėtų būti. Galite gauti skirtingą rezultatą, jei abi gijos atlieka konkrečias funkcijas tiksliai tinkamu laiku.
Šiuo atveju pirmoji gija nuskaito a reikšmę . Prieš tai, kai pirmoji gija gali padidinti nors reikšmę , antroji gija ją nuskaito. Dabar pirmoji gija prideda vienetą prie nulio, bet antroji gija jau mano, kad vertė yra nulis, pridedant vieną prie nulio. Dėl to galutinė a reikšmė yra 1, o ne 2.
Lenktynės pagal blogiausią scenarijų
Nors aukščiau pateiktas pavyzdys gali skambėti ne itin prastai, jis gali turėti dramatiškų padarinių. Ką daryti, jei a reikšmė pasirenka mašinos veikimo režimą? Ką daryti, jei tam tikri tos mašinos veikimo režimai gali būti pavojingi ar net pavojingi gyvybei?
Varžybų sąlygos taip pat nebūtinai turi būti tokios paprastos. Pavyzdžiui, viena gija gali nuskaityti atminties skyrių tuo pačiu metu, kai į ją rašo kita gija. Tokiu atveju skaitymo gijoje gali būti keistai susimaišę duomenys iš prieš ir po jo. Tarkime, kad patikrinimas yra paprastas teisingas / klaidingas patikrinimas.
Jei skaitymo pradžioje kintamasis pasakė „true“, bet buvo perrašytas į žodį false, skaitymo operacijos rezultatas gali būti kažkas panašaus į „trlse“. Tai nėra „tiesa“ ar „netiesa“. Jei dvejetainiame pasirinkime nėra nė vienos iš dviejų parinkčių, programa beveik neabejotinai suges. Dėl šios atminties sugadinimo gali kilti daug saugumo problemų, tokių kaip paslaugų atsisakymas ir privilegijų eskalavimas.
Užrakinti lenktynes
Norint išvengti lenktynių, būtina žinoti, kokie programos atminties bitai yra bendrinami tarp skirtingų gijų. Nieko nereikia daryti, jei kintamasis visada valdomas ir pasiekiamas tik viena gija. Jei dvi ar daugiau gijų gali pasiekti kintamąjį, turite užtikrinti, kad visos tos atminties dalies operacijos būtų baigtos nepriklausomai viena nuo kitos.
Ši nepriklausomybė pasiekiama užrakto dėka. Programos kode reikia užrakinti, kai rašote funkciją, kuri veikia bendroje atminties dalyje. Šis užraktas blokuoja kitoms gijomis prieigą prie tos atminties dalies, kol užraktas nebus atleistas.
Spyna nėra pats elegantiškiausias sprendimas. Viena vertus, ji turi atminties. Jis taip pat gali priversti sriegį pakabinti, laukiant, kol bus atlaisvintas užraktas. Priklausomai nuo situacijos, spyna gali būti neatleidžiama labai ilgą laiką arba gali neatleisti iš viso. Blogiausiu atveju užrakto atrakinimas gali priklausyti nuo to, ar kažkas atsitiks kitoje užblokuotoje gijoje, o tai gali sukelti aklavietę.
Labai svarbu optimizuoti spynų naudojimą. Galite valdyti užrakto detalumą. Pavyzdžiui, jei redaguojate duomenis lentelėje, galite užrakinti visą lentelę arba užrakinti tik redaguotą eilutę. Viso stalo užrakinimas būtų grubus detalumo užraktas. Tai sumažina per daug užraktų įdiegimo išlaidas, tačiau padidina tikimybę, kad užraktas užblokuos kitą giją. Užrakinus tik eilutę, būtų užraktas detalumas. Tai daug mažesnė tikimybė, kad tai trukdys kitiems siūlams, tačiau reikės suplėšyti spynų, todėl padidės bendrosios išlaidos.
Išvada
Atminties užraktas yra kodo įrankis, naudojamas siekiant užtikrinti atomiškumo operacijas atmintyje kelių gijų aplinkoje. Užrakinę atminties dalį prieš operuodami galite būti tikri, kad dėl lenktynių sąlygų nenutiks elgesys. Atminties užraktai yra su papildoma atmintimi, tačiau taip pat gali užblokuoti.
Blokavimas yra tai, kai kita gija bando paveikti užrakintą pemory. Siūlas sėdi ten, užblokuotas, kol užraktas atleidžiamas. Dėl to gali kilti problemų, jei norint atleisti užraktą reikia, kad ką nors padarytų kita gija, nes ji gali būti užblokuota prieš tai, kai bus įvykdyta būtina sąlyga atleisti jį blokuojantį užraktą. Atminties užraktų galima išvengti rašant neblokuojančius kodus. Tačiau tai padaryti gali būti sudėtinga ir mažiau efektyvu nei naudojant spynas. Nepamirškite palikti savo komentarų žemiau.
Šiuolaikiniame skaitmeniniame amžiuje, kai duomenys yra vertingas turtas, kietojo disko klonavimas sistemoje „Windows“ daugeliui gali būti labai svarbus procesas. Šis išsamus vadovas
Ar paleidžiant kompiuterį matote klaidos pranešimą, kuriame rašoma, kad tvarkyklės WUDFRd nepavyko įkelti į kompiuterį?
Ar jūsų darbalaukyje yra NVIDIA GeForce patirties klaidos kodas 0x0003? Jei taip, perskaitykite tinklaraštį, kad sužinotumėte, kaip greitai ir paprastai ištaisyti šią klaidą.
Prieš rinkdamiesi SMPS savo kompiuteriui, sužinokite, kas yra SMPS ir ką reiškia skirtingi efektyvumo rodikliai.
Ketinau įsigilinti į temą, kuri tampa vis svarbesnė kibernetinio saugumo pasaulyje: izoliacija pagrįstas saugumas. Šis požiūris į
Šiandien ketinome įsigilinti į įrankį, kuris gali automatizuoti pasikartojančias spustelėjimo užduotis jūsų „Chromebook“ įrenginyje: automatinį spustelėjimą. Šis įrankis gali sutaupyti laiko ir
Išspręskite problemą, kai Roomba robotas siurblys sustoja, prilimpa ir vis sukasi.
Gaukite atsakymus į klausimą, kodėl „Chromebook“ neįsijungia? Šiame naudingame „Chromebook“ naudotojams skirtame vadove.
„Steam Deck“ siūlo tvirtą ir įvairiapusę žaidimo patirtį, kuri yra jūsų rankose. Tačiau norėdami optimizuoti savo žaidimus ir užtikrinti geriausią įmanomą
Pakeiskite savo Fitbit Versa 4 laikrodžio ciferblatą, kad kasdien nemokamai atrodytumėte kitaip. Pažiūrėkite, kaip tai greita ir paprasta.