Co je programování signálu?
„Programování signálu“ je termín, který se často používá k označení počítačového programu, který funguje primárně v reakci na signály nebo události generované nějakou změnou stavu nebo vstupem uživatele. Téměř libovolná část počítačového systému, od periferního zařízení po samotný operační systém, může generovat signál, který může být aplikací zachycen a poté zpracován. V mnoha podobách se programování signálu podobá programování řízenému událostmi. Mezi nejčastější využití programování signálů patří grafická uživatelská rozhraní, která reagují na vstup uživatele, síťová komunikace a programy nízké úrovně, které zachycují a zpracovávají specifické systémové signály.
Signál v počítačovém programování lze definovat jako zprávu, událost nebo přerušení v závislosti na jeho původu, systémové architektuře nebo dokonce preferenci programátora. V nejširším slova smyslu je to indikátor toho, že se některý stav nebo část dat změnila, a někdy je doprovázena dalšími informacemi o změně, která nastala. Signál může generovat uživatel, když je stisknuto tlačítko, z hardwaru, jako je monitor, když dojde k vertikálnímu návratu, nebo dokonce z operačního systému, když se během přidělování paměti stane něco, jako je například chyba stránky.
V rámci aplikace může programování signálu nabývat několika typů architektur, ale jedním z nejčastějších je model posluchače nebo pozorovatele. V této metodě může být část uživatelem definovaného kódu nějakým způsobem předána zpracovateli signálů, obvykle v operačním systému, který poté volá tento kus kódu, aby zpracoval všechny signály, které odpovídají tomu, co funkce hledá. Typ signálu, který může funkce často zpracovat, je určen proměnnou známou jako maska signálu, takže některé signály nejsou předávány rutinám, které nejsou navrženy pro jejich zpracování.
Druhý typ programování signálu zahrnuje program, který implementuje frontu, která přijímá příchozí signály. Tato fronta je dotazována v hlavní prováděcí smyčce programu a program reaguje, jakmile signál vstoupí do fronty. Každý signál pak může být logicky tříděn, zpracován, ignorován nebo předán jinému procesu.
Při použití souběžných procesů nebo vícevláknových aplikací se mohou při programování signálů vyskytnout určité potíže. Komplikace mohou nastat, pokud například dvě samostatná vlákna poslouchají signály generované dvěma samostatnými uživatelskými vstupními zařízeními nebo ze dvou síťových soketů. Pokud se dva uživatelé současně pokusí provést změnu některých dat, pak by programová data mohla vypadnout ze synchronizace a vypadat odlišně pro každého uživatele. Tomuto stavu lze zabránit pomocí lineární fronty nebo implementací metod synchronizace vláken.