Šiuolaikiniai kompiuteriai turi kelis apdorojimo branduolius. Darant prielaidą, kad apdorojimo pakanka, kad kiekvienas branduolys galėtų likti nuolat užimtas. jiems bus priskirta skaičiavimo darbų punktų eilė. Arba gijos, kurias užbaigia planuoklis.
Vykdant šias gijas galima sukurti naujų gijų ar darbo elementų. Tai yra atskiros gijos, kurias galima apdoroti vienu metu. Jiems gali tekti grąžinti rezultatus į neršto programas arba neribotą laiką likti visiškai atskirai. Paprastai šios antrinės gijos priskiriamos tam pačiam apdorojimo branduoliui kaip ir pirminė.
Visa tai daro prielaidą, kad visi branduoliai yra užimti. Taip atsitiks, jei siūlai nesibaigia arba naujos gijos atsiranda tokiu pat greičiu arba greičiau nei baigiasi esamos gijos. Tačiau realiame pasaulyje ilgalaikis darbo krūvis retai būna toks paprastas, ypač galutinio vartotojo kompiuterių įrenginiuose. Galiausiai apdorojimo branduolys greičiausiai atliks visas priskirtas užduotis. Kai taip nutinka, užuot sėdi be darbo ir eikvoja potencialų našumą, ji tikrina kitų apdorojimo branduolių darbo eiles ir pavagia iš jų darbo elementą.
Privalumai ir trūkumai
Darbo vagystė reiškia, kad neveikiantis apdorojimo branduolys aktyviai ieškos darbo, kad jį užbaigtų. Tai neleidžia potencialiai didelei viso procesoriaus daliai neveikti, o tai yra naudinga. Vis dėlto darbo vagystė gali kainuoti. Pavyzdžiui, naujasis apdorojimo branduolys greičiausiai turės įkelti visus svarbius duomenis į savo talpyklos atmintį.
Tai gali užtrukti, ypač jei jos turi būti prašoma iš sistemos RAM, o ne aptarnaujama bendrinamos talpyklos pakopos. Gali būti, kad pradinis procesorius būtų galėjęs atnaujinti tą darbo elementą per tą laiką, todėl bendras vykdymas būtų greitesnis. Taip gali būti net tuo atveju, jei apdorojimo branduolys, iš kurio buvo pavogtas darbo objektas, niekada nebuvo pradėjęs jo apdoroti. Kai kurios talpykloje saugomos reikšmės gali būti identiškos pagrindinėse ir antrinėse gijose.
Įgyvendinimai
Kelios programavimo kalbos turi vykdymo laikus, kurios gali suplanuoti darbą tiesiogiai skirtuose procesoriuose. Pavyzdžiui, tai gali padaryti „Cilk“ programavimo kalba, „Rust Tokio“ vykdymo laikas ir „.Net Task Parallel Library“. Arba operacinė sistema gali būti atsakinga už faktinio procesoriaus laiko planavimą. Programa tiesiog prideda užduotis į „darbuotojų gijų“, kurias pati suplanuoja operacinė sistema, telkinį.
Taip atsitinka sistemose, kuriose programa neturi specialios tiesioginės prieigos prie apdorojimo branduolių, bet turi dalytis prieiga su kitais procesais. Šiame scenarijuje reikia būti ypač atsargiems, kad siūlas nebūtų pakartotinai pavogtas, kai jis neveikia.
Yra įvairių požiūrių, kaip darbo daiktai atrenkami pavogti. Pradinėje koncepcijoje buvo siekiama pasirinkti kitą atsitiktinį branduolį. Jei jo eilėje buvo vienas ar daugiau darbo elementų, paimkite paskutinį. Priklausomai nuo pasirinkimo, ar antrinį procesą iš karto vykdo pradinis procesorius. Arba, jei ji nustumiama į procesoriaus eilę, o pirminis procesas ir toliau vykdomas, pagrindinė arba antrinė gija bus pavogta.
Visa tai galima apibendrinti kaip „Work Stealing“ – apkrovos balansavimo techniką, užtikrinančią tolygų žodžio apkrovos paskirstymą tarp turimų procesorių. Tokiu būdu visi procesoriai ką nors daro, kad padėtų.
Išvada
Darbo vagystė yra procesas, kuris vyksta automatiškai kelių branduolių procesoriuose. Kiekviename branduolyje yra eilė užduočių, kurias reikia atlikti. Kai procesorius atlieka savo užduotis, jis pavagia kitą užduotį iš kito apdorojimo branduolio eilės. Tai padeda išvengti procesoriaus, kad kai kurie branduoliai neveiktų, o kiti vis dar turi atlikti užduočių eilę.