Leader/followers
Leader/followers (vůdce/následovníci) je v softwarovém inženýrství rozšířením nebo variantou návrhového vzoru Thread pool (bazének vláken). Řeší situaci, kdy je větší množství požadavků či událostí zpracováváno více vlákny, přičemž požadavků je více než vláken.
Účel
[editovat | editovat zdroj]Cílem tohoto návrhového vzoru je zjednodušit přidělování událostí vláknům a minimalizovat nároky na výpočty a kopírování dat s tím spojené.
Struktura
[editovat | editovat zdroj]Návrh sestává ze čtyř základních tříd: handle, handle set, event handler a thread pool.
Handle
[editovat | editovat zdroj]Handle představuje zdroj událostí, například síťové spojení. Objektů třídy handle, tedy zdrojů událostí, může být více a mohou být sdruženy do třídy Handle Set, která poskytuje metody pro zjištění, zda některý ze zdrojů vyvolal událost a případné čekání, až nějaká událost nastane.
Event handler
[editovat | editovat zdroj]Event handler je rozhraní pro zpracování jednotlivých konkrétních událostí.
Thread pool
[editovat | editovat zdroj]Thread pool je jádrem tohoto vzoru. Obsahuje jednotlivá vlákna, která mají události zpracovávat. Každé vlákno může být v jednom ze tří stavů: vůdce, následovník nebo zpracovávání. Vůdce je vždy maximálně jeden. Je to vlákno, které čeká na další událost. K tomu využívá Handle Set. Jakmile skrze Handle Set zjistí událost, kterou může zpracovat, určí jedno z dalších vláken, které v tu chvíli žádnou událost nezpracovávají – tedy jednoho z následovníků, novým vůdcem. Poté skrze příslušný event handler spustí zpracovávání události. Po ukončení zpracovávání přejde do stavu následovníka. Následovník je tedy spící vlákno, které nedělá nic a čeká, až bude probuzeno aktuálním vůdcem.
Příklad z reálného života
[editovat | editovat zdroj]V reálném životě je si lze použití tohoto vzoru představit například jako taxíky čekající na letišti. Jednotlivé taxíky zde představují vlákna. První taxík je v roli vůdce – čeká na přílet letadla a příchod pasažérů, ostatní taxíky jsou následovníci. Po příchodu pasažérů je první taxík naloží a odváží, další taxík v řadě se stává vůdcem. První taxík se po odvezení cestujících vrací zpět na letiště – na thread pool a přechází do role následovníka.
Literatura
[editovat | editovat zdroj]- Douglas C. Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann "Pattern-Oriented Software Architecture, Volume 2, Patterns for Concurrent and Networked Objects", Wiley, 2000