Leader/followers

Z Wikipedie, otevřené encyklopedie

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