Vlákno (Thread)

Vlákno je základní jednotkou provádění kódu v rámci procesu. Moderní programování je postaveno na tzv. multithreadingu (vícevláknovosti), což umožňuje jedné aplikaci provádět více činností najednou, aniž by se navzájem blokovaly.

Rozdíl mezi Procesem a Vláknem

Je důležité tyto dva pojmy nezaměňovat, i když spolu úzce souvisejí:

Vlastnost	Proces (Process)	Vlákno (Thread)
Izolace	Má vlastní vyhrazenou paměť.	Sdílí paměť s ostatními vlákny stejného procesu.
Náročnost	„Těžká“ váha (náročné na vytvoření a prostředky).	„Lehká“ váha (rychlé vytvoření i přepínání).
Stabilita	Pád jednoho procesu neovlivní ostatní.	Pád jednoho vlákna může shodit celý proces.

[Image: Process vs Thread memory model - process has its own address space, threads share it]

Proč používáme více vláken?

Představte si moderní webový prohlížeč. Díky multithreadingu může:

Jedno vlákno vykreslovat grafiku stránky.

Druhé vlákno stahovat data z internetu.

Třetí vlákno reagovat na kliknutí vaší myši.

Pokud by prohlížeč používal pouze jedno vlákno, při stahování velkého obrázku by celý program „zamrzl“ a přestal reagovat na ovládání.

Vlákna a Hardware (Logická jádra)

Vztah mezi softwarovými vlákny a hardwarem (procesorem) určuje výkon:

Hardwarové vlákno: Pokud má procesor 8 jader a technologii Hyper-Threading, hlásí systému 16 logických jader. To znamená, že dokáže v jeden okamžik skutečně (fyzicky) zpracovávat 16 softwarových vláken.

Softwarové vlákno: Aplikace jich může mít stovky. Operační systém je pak na procesoru střídá (tzv. Context Switching) tak rychle, že máme pocit, že běží všechny naráz.

Problémy při práci s vlákny

Programování vícevláknových aplikací je náročné, protože vlákna sdílejí stejná data. To vede k rizikům:

Race Condition (Souběh): Dvě vlákna se snaží změnit stejnou hodnotu ve stejný čas. Výsledek závisí na tom, které z nich bylo o milisekundu rychlejší, což vede k nepředvídatelným chybám.

Deadlock (Uváznutí): Vlákno A čeká na data od vlákna B, a vlákno B zároveň čeká na dokončení práce vlákna A. Program se zastaví a přestane reagovat.

Synchronizace: K ošetření těchto chyb se používají mechanismy jako Mutex (zámek), který dovolí přístup k datům vždy jen jednomu vláknu.

[Image: Visualization of a Deadlock - two threads blocking each other]

Typy vláken

User-level threads: Vlákna spravovaná knihovnou v uživatelském prostoru (rychlá, ale systém o nich neví).

Kernel-level threads: Vlákna spravovaná přímo jádrem operačního systému (vhodná pro vícejádrové procesory).

Související pojmy: Proces, Multitasking, Hyper-Threading, Core (Jádro), CPU, Deadlock, Synchronizace.