Савремени рачунари имају више језгара за обраду. Под претпоставком да има довољно обраде тако да свако језгро може бити непрекидно заузето. биће им додељен ред задатака рачунског рада. Или нити које ће довршити планер.
Током извршавања ових нити, могуће је покренути нове нити или радне ставке. То су одвојене нити које се могу обрадити истовремено. Можда ће морати да пошаљу резултате програмима за мријест или да остану потпуно одвојени на неодређено вријеме. Обично су ове подређене нити додељене истом језгру за обраду као и родитељ.
Све ово претпоставља да су сва језгра заузета. Ово ће се догодити ако се ниједна нит не заврши или се нове нити покрећу истом брзином или брже од завршетка постојећих нити. У стварном свету, међутим, дуготрајно радно оптерећење ретко је тако једноставно, посебно код рачунарских уређаја крајњих корисника. На крају, процесорско језгро ће вероватно завршити све додељене задатке. Када се то догоди, уместо да седи у стању мировања и губи потенцијалне перформансе, уместо тога проверава радне редове других језгара за обраду и краде радну ставку од њих.
Предности и недостаци
Крађа посла значи да ће процесно језгро у стању мировања активно тражити посао да заврши. Ово спречава потенцијално велики део укупног процесора да не ради, што је корисно. Међутим, крађа посла може имати одређене трошкове. На пример, ново језгро за обраду ће вероватно морати да учита све релевантне податке у своју кеш меморију.
Ово може потрајати, посебно ако се мора затражити из системске РАМ меморије, а не да га опслужује заједнички ниво кеша. Могуће је да би оригинални процесор могао да настави радну ставку у том временском оквиру, што би довело до бржег укупног извршења. Ово може бити чак и ако процесно језгро из којег је радни предмет украден никада није почело да га обрађује. Неке кеширане вредности могу бити идентичне између родитељске и подређене нити.
Имплементације
Неколико програмских језика има времена извођења која могу планирати рад директно на наменским процесорима. На пример, програмски језик Цилк, рунтиме Руст Токио и .Нет Таск Параллел Либрари могу то да ураде. Алтернативно, оперативни систем може бити задужен за заказивање стварног времена процесора. Са програмом једноставно додавање задатака у скуп „радничких нити“, које сами заказују оперативни систем.
Ово се дешава у системима у којима програм нема наменски директан приступ процесним језграма, али мора да дели приступ са другим процесима. У овом сценарију се мора обратити посебна пажња да се осигура да се нит више пута не краде док мирује.
Постоје различити приступи одабиру радних предмета за крађу. У првобитном концепту, приступ је био да се изабере друго насумично језгро. Ако је имао једну или више радних ставки у реду, узмите последњу. У зависности од преференције да ли се подређени процес одмах извршава од стране изворног процесора. Или, ако се гурне у ред процесора и родитељски процес настави да се извршава, родитељска или подређена нит ће бити украдена.
Све се то може сажети као Ворк Стеалинг, техника балансирања оптерећења која осигурава да се оптерећење речи равномерно распоређује међу доступним процесорима. На тај начин сви процесори раде нешто да помогну.
Закључак
Крађа посла је процес који се дешава аутоматски у вишејезгарним процесорима. Свако језгро има ред задатака за обављање. Када процесор заврши своје задатке, онда краде други задатак из реда другог језгра за обраду. Ово помаже у спречавању процесора да нека језгра мирују док други још увек имају ред задатака за обављање.