Rozdíl mezi kooperativním a preemptivním vysvětlil Laurent Esnault na 4D Summitu 2016

Automaticky přeloženo z Deepl

Laurent Esnault, viceprezident pro inženýrství, vysvětluje rozdíl mezi kooperativními a preemptivními procesy během své Break Out Session o preemptivním vícevláknovém zpracování na konferenci 4D Summit 2016. Díky technologii Preemptive Multi-threading můžete mít více paralelních procesů, a tím přidávat další a další uživatele, ať už pro desktopové nebo webové aplikace.

Pokud jste Laurentovu relaci na 4D Summitu 2016 nestihli, podívejte se na toto video a užijte si osobní školení od mistra preemptivního vícevláknového zpracování!

Rozdíl mezi kooperativním a preemptivním

Co je tedy kooperativní a co preemptivní?

Kooperativní režim je obecně to, co dnes používáte u svých procesů 4D. Kooperativní znamená, že procesy 4D spolupracují (pracují společně) a sdílejí jeden procesor. Někdy spolupracují explicitně, jako když použijete příkaz IDLE, a někdy spolupracují implicitně, jako když použijete většinu ostatních příkazů jazyka 4D. Je to proto, že interně 4D používá příkaz IDLE k předání procesoru jinému procesu. V důsledku toho může být v daném okamžiku použito pouze jedno jádro CPU.

Všichni samozřejmě znáte procesy 4D, které dnes používáte. A zdá se přirozené používat tyto procesy pro přístup k uživatelskému rozhraní. Můžete otevřít okno, zobrazit dialog nebo formulář atd. Ale ve skutečnosti to pro operační systém není vůbec přirozené. Většina operačních systémů zakazuje přístup k uživatelskému rozhraní z jiného než hlavního vlákna. Ale u kooperativních procesů 4D interně spravuje přístup k uživatelskému rozhraní… dokonce i ve vedlejším vlákně.

V preemptivním režimu nemusíte volat příkaz IDLE, protože procesy 4D nepotřebují spolupracovat, aby se dělily o procesor: to dělá operační systém. Operační systém preemptivně přidělí CPU jednomu nebo druhému vláknu. Pokud tedy máte v počítači více procesorů, může být současně vykonáváno několik vláken. Výhodou tedy je, že můžete využít všechna jádra svého počítače. Z preemptivního vlákna však nemůžete přistupovat k uživatelskému rozhraní.

blank

Můžete vidět, jak jsou v kooperativním režimu procesy vykonávány postupně, jeden po druhém a využívají pouze jeden procesor, zatímco v preemptivním režimu operační systém rozesílá dva procesy na všechny procesory (v uvedeném příkladu na procesor 1 i na procesor 2).

Výhoda je zřejmá. Globální doba provádění je v preemptivním režimu kratší, pokud máte k dispozici dva procesory. A to i přesto, že doba provádění jednotlivých procesů je stejná. Preemptivní plánování nevede ke zvýšení výkonu v době provádění procesu. Zkrátí se globální doba provádění více úloh, které běží ve více procesech.

Demonstrace

Zde je velmi jednoduchá ukázka. Každé tlačítko vytvoří čtyři jednotlivé procesy.

blank

První tlačítko vytváří čtyři kooperativní procesy, které provádějí nějaké nesmyslné výpočty (čistě pro účely demonstrace). Globální doba provádění je 643 tiků a doba provádění každého jednotlivého procesu je přibližně 150 tiků. Globální doba provádění je tedy v podstatě jen součet čtyř individuálních dob provádění.

Pokud provedeme úplně stejný výpočet ve čtyřech preemptivních vláknech, uvidíte, že doba provádění jednotlivých procesů je zhruba stejná (150 tiků), nicméně globální doba provádění je ČTYŘIKRÁT kratší.

Příklad databáze použité pro demonstraci a doplňující vysvětlení najdete v příspěvku Vanessy o preemptivních procesech.