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

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

Návrh sestává ze čtyř základních tříd: handle, handle set, event handler a thread pool.

Handle editovat

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

Event handler je rozhraní pro zpracování jednotlivých konkrétních událostí.

Thread pool editovat

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

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

  • Douglas C. Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann "Pattern-Oriented Software Architecture, Volume 2, Patterns for Concurrent and Networked Objects", Wiley, 2000