Vlákna vs. procesy
Potřebujete paralelizovat část programu? Nevíte, jestli k tomu využít nové vlákno nebo nový proces? V tomto článku jsem shrnul základní rozdíly mezi procesy a vlákny.
Vlákno (Thread) a proces (Process) jsi jsou v mnohém podobné. Oba mají identifikátor, množinu registrů které využívají, oba jsou v nějakém stavu plánování, mají nějakou prioritu, mohou měnit obsahy svých proměnných či alokovat nové zdroje atd. Avšak je tu několik rozdílů, které mohou hrát velkou roli, při rozhodování, kterou techniku paralelizace programu použít.
Hlavním rozdílem, mezi procesem a vláknem je sdílení paměti. Zatímco proces je robustní a samostatný celek, který má všechnu paměť sám pro sebe, vlákno sdílí svoji paměť s dalšími vlákny.
Přehledné porovnání:
Výkon programu
P) Vytvoření nového procesu vyžaduje kopii původního procesu a jeho dat. => Značná režie.
V) Při vytvoření vlákna se nemusí kopírovat proces ani data. => Vlákno je levné.
P) Přepnutí kontextu u procesu je poměrně dlouhá a náročná činnost.
V) Přepnutí kontextu u vláken je méně náročné, než v případě procesu.
Práce s pamětí
P) Procesy si nemohou navzájem přepsat svoji paměť. Jedinou výjimku tvoří použití sdílené paměti (Shared memory), což je metoda poskytovaná systémem v rámci mezi-procesové komunikace (IPC – Inter-process communication).
V) Vlákno může přepsat paměť se kterou pracuje jiné vlákno a vytvořit tím chybu v programu.
P) Každý proces musí mít svou vlastní paměť s vlastními kopiemi proměnných. => Procesy zabírají více paměti a samotná alokace také není zadarmo a vyžaduje nějakou režii.
V) Vlákna sdílí společný paměťový prostor a díky tomu může být výsledný program méně náročný na paměť a spotřebovávat méně systémových prostředků.
Odolnost proti chybám
P) Chyba v jednom procesu neovlivní ostatní procesy.
V) Chyba v jednom vlákně může shodit celý proces se všemi běžícími vlákny.
Vzájemná komunikace
P) Procesy mezi sebou mohou komunikovat pouze pomocí prostředků IPC. Jaké prostředky to jsou, záleží na operačním systému. V Linuxu do IPC patří například: Soubory, signály, sokety, zprávy, roury, pojmenované roury, sdílená paměť, soubor namapovaný do paměti, RPC (Remote Procedure Calls).
V) Vlákna nepotřebují žádný speciální mechanismus na komunikaci, protože mají společný paměťový prostor.
Synchronizace
P+V) Synchronizace v přístupu k sdíleným datům je nutná jak v případě vláken tak procesů.
P) Proces může ke svým vlastním datům přistupovat bez omezení.
V) Vlákna vlastní data nemají, všechny data jsou sdílená, a proto je třeba všechny přístupy do paměti synchronizovat.
Priority
P) Změna priority rodiče nemá vliv na proces, který je potomkem.
V) Změna priority hlavního vlákna procesu se může odrazit na všech vláknech.