Vlákno (program)

Z Multimediaexpo.cz

Vlákno (též vlákno řízení, anglicky thread) označuje v informatice odlehčený proces, pomocí něhož se snižuje režie operačního systému při změně kontextu, které je nutné pro zajištění multitaskingu (zdánlivého běhu více úloh zároveň, který je zajištěn jejich rychlým střídáním na procesoru) nebo při masivních paralelních výpočtech. Zatímco běžné procesy jsou navzájem striktně odděleny, sdílí vlákna nejen společný paměťový prostor, ale i další struktury. Operační systém, který vlákna nepodporuje, má technicky jedno vlákno na každý proces, zatímco při podpoře vláken je možné v rámci jediného procesu vytvořit mnoho vláken. Vlákna usnadňují díky sdílené paměti vzájemnou komunikaci, což však přináší další komplikace v podobě souběhu (anglicky race condition).

Obsah

Charakteristika

Praktickým rozdílem mezi multithreadovým a multiprocesovým multitaskingem je kromě sdílené paměti (která některé věci usnadňuje a jiné naopak ztěžuje) režie při přepínání: přepnutí mezi vlákny bývá výrazně rychlejší neboť vlákna sdílejí stejnou paměť, stejná oprávnění, stejné otevřené soubory a další vlastnosti. Rychlejší může být i vytváření a rušení vlákna. Vlákno také spotřebuje méně paměti, což je důležité pro aplikace, které používají stovky nebo více vláken. Vlákna je možné vytvořit i čistě na aplikační úrovni bez nativní podpory operačního systému (využitím sdílené paměti a dalších technik). Takto vzniklá vlákna je poté možné spouštět postupně v jednotlivých procesech operačního systému nebo takzvaně m:n, tedy v několika vláknech operačního systému současně spouštět větší počet aplikačních vláken. Toto řešení sice není tak dobré jako řešení s podporou operačního systému - například volání služby operačního systému zablokuje „větší“ vlákno OS a ne jenom aplikační vlákno - ale pro některé úlohy může být stále rychlejší.

Podpora vláken v OS

Z hlediska spravování vláken OS můžeme vlákna rozdělit na

  • vlákna na uživatelské úrovni (ULT)
  • vlákna na úrovni jádra (KLT)
  • kombinace KLT a ULT

Vlákna na uživatelské úrovni (ULT)

Správu vláken provádí tzv. vláknová knihovna (thread library) na úrovni aplikačního procesu, jádro operačního systému o jejich existenci neví a přepojování mezi vlákny nepožaduje provádění funkcí jádra. Nepřepíná se ani kontext procesu ani režim procesoru. Přepínání vláken a jeho plánování je specifické pro konkrétní aplikaci. Programátor má možnost zvolit si nejvhodnější plánovací strategii a algoritmus sám. U OS není vyžadováno multiprogramování, stačí speciální knihovna. Příklad V případě POSIXu je to knihovna Pthreads („pítreds“)

Vláknová knihovna

Pro provozování vláken na uživatelské úrovni je třeba speciální knihovna, která musí umožňovat:

  • rušení a vytváření vláken
  • předávání dat a zpráv mezi vlákny
  • plánování běhu vláken
  • uchovávání a obnova kontextu vláken

Výhody uživatelských vláken

  • nezávislost na podpoře vláken v OS
  • přepínání mezi vlákny je nezávislé na JOS (může být rychlejší)
  • výrazně rychlejší tvorba a přepínání vláken
  • plná kontrola procesu nad správou běhu vláken

Nevýhody

  • volání služby jedním vláknem zablokuje všechna vlákna procesu
  • nutnost dodatečného programování (řízení vláken programátorem)
  • pokud jádro přiděluje procesor pouze procesům, nemohou dvě vlákna téhož procesu běžet současně, i když systém obsahuje více procesorů

Vlákna na úrovni jádra OS (KLT)

Veškerá správa vláken je řízena OS a každé vlákno v uživatelském prostoru je zobrazeno na vlákno v jádře. Samotné jádro vytváří, ruší a plánuje vlákna.

Výhody

  • volání systému neblokuje ostatní vlákna téhož procesu
  • jeden proces může využít více procesorů
  • tvorba, rušení a přepínání mezi vlákny je levnější než mezi procesy
  • i programy jádra mohou mít vícevláknový charakter

Nevýhody

  • správa je nákladnější než u čistě uživatelských vláken

Příklady

  • Windows NT 4.0/2000/XP
  • Linux
  • 4.4BSD UNIX

Kombinace ULT a KLT

Některé OS podporují oba způsoby běhu vláken. Přiřazování uživatelských vláken k systémovým se děje automaticky (bez programátora) anebo programátor může nastavit počet vláken na úrovni jádra.

Podpora u OS

Kombinaci ULT a KLT podporují například následující OS:

  • Windows 2000/XP s nadstavbou ThreadFiber
  • FreeBSD 5.x

Související články