Moderní počítače mají více procesorových jader. Za předpokladu, že je dostatek zpracování, takže každé jádro může zůstat nepřetržitě zaneprázdněné. bude jim přidělena fronta výpočetních pracovních položek. Nebo vlákna, která má dokončit plánovač.
Během spouštění těchto vláken je možné vytvářet nová vlákna nebo pracovní položky. Jedná se o samostatná vlákna, která lze zpracovávat současně. Možná budou muset vrátit výsledky zpět do programů tření nebo zůstat po neomezenou dobu zcela odděleni. Tyto podprocesy jsou obvykle přiřazeny ke stejnému jádru zpracování jako nadřazené.
To vše předpokládá, že všechna jádra jsou zaneprázdněna. K tomu dojde, pokud žádné vlákno nekončí nebo se nová vlákna nevytvářejí stejnou rychlostí nebo rychleji, než končí existující vlákna. V reálném světě je však dlouhodobá pracovní zátěž zřídkakdy tak jednoduchá, zejména u počítačových zařízení pro koncové uživatele. Nakonec procesorové jádro pravděpodobně dokončí všechny přidělené úkoly. Když k tomu dojde, místo nečinnosti a plýtvání potenciálním výkonem zkontroluje pracovní fronty ostatních procesorových jader a ukradne z nich pracovní položku.
Výhody a nevýhody
Krádež práce znamená, že nečinné procesorové jádro bude aktivně vyhledávat práci, aby ji dokončil. To zabraňuje tomu, aby potenciálně velká část celého procesoru zůstala nečinná, což je užitečné. Krádež práce však může být spojena s určitými náklady. Například nové procesorové jádro bude pravděpodobně muset načíst všechna relevantní data do své mezipaměti.
To může nějakou dobu trvat, zvláště pokud je třeba vyžádat si to ze systémové paměti RAM, a ne obsluhovat ji vrstvou sdílené mezipaměti. Je možné, že původní procesor by byl schopen obnovit tuto pracovní položku v tomto časovém rámci, což vedlo k rychlejšímu celkovému provádění. To může nastat i v případě, že zpracovatelské jádro, ze kterého byl pracovní předmět odcizen, jej nikdy nezačalo zpracovávat. Některé hodnoty uložené v mezipaměti mohou být identické mezi nadřazenými a podřízenými vlákny.
Implementace
Několik programovacích jazyků má běhové prostředí, které může naplánovat práci přímo na vyhrazených procesorech. Umí to například programovací jazyk Cilk, runtime Rust Tokio a .Net Task Parallel Library. Alternativně může mít operační systém na starosti plánování skutečného času procesoru. Pomocí programu jednoduše přidáte úlohy do fondu „pracovních vláken“, které jsou samy naplánovány operačním systémem.
K tomu dochází v systémech, kde program nemá vyhrazený přímý přístup k jádrům zpracování, ale musí sdílet přístup s jinými procesy. V tomto scénáři je třeba dbát zvýšené opatrnosti, aby bylo zajištěno, že vlákno nebude opakovaně odcizeno, když je nečinné.
Existují různé přístupy k tomu, jak jsou pracovní předměty vybírány ke zcizení. V původním konceptu se přistupovalo k výběru jiného náhodného jádra. Pokud má ve frontě jednu nebo více pracovních položek, vezměte poslední. V závislosti na preferenci, zda je podřízený proces okamžitě spuštěn původním procesorem. Nebo, pokud je přesunuto do fronty procesoru a nadřazený proces se nadále provádí, nadřazené nebo podřízené vlákno bude odcizeno.
Vše lze shrnout jako Work Stealing, technika vyvažování zátěže, která zajišťuje, že se zátěž slova rozloží rovnoměrně mezi dostupné procesory. Tímto způsobem všechny procesory dělají něco, aby pomohly.
Závěr
Krádež práce je proces, který se u vícejádrových procesorů děje automaticky. Každé jádro má frontu úkolů, které je třeba provést. Když procesor dokončí své úkoly, ukradne další úkol z fronty jiného procesorového jádra. To pomáhá zabránit tomu, aby některá jádra zůstala nečinná, zatímco jiná mají stále frontu úloh, které je třeba provést.