Zelená vlákna - Green threads

V programování počítače , zelená vlákna nebo virtuální závity jsou závity , které jsou naplánovány pomocí runtime knihovny nebo virtuálního stroje (VM), namísto nativně podkladové operačního systému (OS). Zelená vlákna napodobují vícevláknová prostředí, aniž by se spoléhali na jakékoli schopnosti nativního operačního systému, a jsou spravována v uživatelském prostoru místo v prostoru jádra , což jim umožňuje pracovat v prostředích, která nemají podporu nativních vláken.

Etymologie

Zelená vlákna odkazují na název původní knihovny vláken pro programovací jazyk Java (která byla vydána ve verzi 1.1 a poté byla zelená vlákna ve verzi 1.3 upuštěna od nativních vláken). Byl navržen The Green Team ve společnosti Sun Microsystems .

Výkon

Na vícejádrovém procesoru mohou implementace nativního vlákna automaticky přiřadit práci více procesorům, zatímco implementace zeleného vlákna obvykle ne. Zelená vlákna lze u některých virtuálních počítačů spustit mnohem rychleji. Na jednoprocesorových počítačích však dosud nebyl nejefektivnější model jednoznačně určen.

Srovnávací testy na počítačích s (dlouho zastaralým) Linuxovým jádrem verze 2.2 ukázaly, že:

Když zelené vlákno provede blokovací systémové volání, nejenže je toto vlákno zablokováno, ale jsou zablokována všechna vlákna v rámci procesu. Aby se tomuto problému vyhnuly, musí zelená vlákna používat asynchronní I/O operace, i když zvýšenou složitost na straně uživatele lze snížit, pokud virtuální stroj implementující zelená vlákna vyvolá konkrétní I/O procesy (skryté uživateli) pro každý I/O O operace.

Existují také mechanismy, které umožňují použití nativních vláken a snižují režijní náklady na aktivaci a synchronizaci vláken:

  • Závit bazény snížit náklady na plodit nové vlákno by opětovné použití omezeného počtu vláken.
  • Jazyky, které používají virtuální počítače a nativní vlákna, mohou použít únikovou analýzu, aby se vyhnuly synchronizaci bloků kódu, když nejsou potřeba.

Zelená vlákna ve virtuálním stroji Java

Původní implementace: Green Threads

V Javě 1.1 byla zelená vlákna jediným modelem vláken používaným virtuálním strojem Java (JVM), alespoň na Solarisu . Protože zelená vlákna mají ve srovnání s nativními vlákny určitá omezení, následné verze Java je upustily ve prospěch nativních vláken.

Výjimkou je virtuální počítač Squawk , který je směsicí mezi operačním systémem pro zařízení s nízkou spotřebou a virtuálním strojem Java. K minimalizaci používání nativního kódu a podpoře migrace jeho izolátů používá zelená vlákna .

Kilim a Quasar jsou projekty s otevřeným zdrojovým kódem, které implementují zelená vlákna v novějších verzích JVM úpravou bajtového kódu Java vytvořeného kompilátorem Java (Quasar také podporuje Kotlin a Clojure ).

Budoucí implementace: Project Loom

Project Loom : Virtuální vlákna jsou odlehčenou alternativou naplánovanou v uživatelském režimu ke standardním vláknům spravovaným OS. Virtuální vlákna jsou namapována na vlákna OS ve vztahu mnoho k mnoha, na rozdíl od vztahu mnoho k jednomu z původní implementace.

Zelená vlákna v jiných jazycích

Existuje několik dalších programovacích jazyků, které místo nativních vláken implementují ekvivalenty zelených vláken. Příklady:

Erlang virtuální stroj má to, co by se dalo nazvat zelené procesy - jsou jako operační systém zpracovává (nesdílejí stav jako nitě dělat), ale jsou realizovány v rámci Erlang běhové prostředí (ERTS). Někdy se jim říká zelená vlákna , ale mají výrazné rozdíly od standardních zelených vláken.

V případě GHC Haskell dojde k přepnutí kontextu při prvním přidělení po konfigurovatelném časovém limitu. Vlákna GHC jsou také potenciálně spuštěna na jednom nebo více vláknech OS během jejich životnosti (mezi vlákny GHC a vlákny OS existuje vztah mnoho k mnoha), což umožňuje paralelismus na symetrických víceprocesních strojích, aniž by se vytvářely dražší vlákna OS, než je potřeba běžet na dostupném počtu jader.

Occam je v tomto seznamu neobvyklý, protože jeho původní implementace byla vytvořena pro transputer , a proto nebyl potřeba žádný virtuální stroj. Pozdější porty pro jiné procesory zavedly virtuální stroj podle vzoru transputeru, což je efektivní volba kvůli nízkým režijním nákladům.

Většina virtuálních počítačů Smalltalk nepočítá kroky vyhodnocení; virtuální počítač však může stále předcházet provádění podprocesu na externích signálech (například vypršení časovačů nebo zpřístupnění I/O). Obvykle se používá plánování každý s každým, aby proces s vysokou prioritou, který se pravidelně probouzí, účinně implementoval předponu sdílení času :

 [
    [(Delay forMilliseconds: 50) wait] repeat
 ] forkAt: Processor highIOPriority

Jiné implementace, např. QKS Smalltalk, vždy sdílejí čas. Na rozdíl od většiny implementací zeleného vlákna podporuje QKS také prevenci prioritní inverze .

Viz také

Reference

externí odkazy