Mis on signaali programmeerimine?

“Signaali programmeerimine” on termin, mida sageli kasutatakse arvutiprogrammi kohta, mis toimib peamiselt vastusena signaalidele või sündmustele, mis on genereeritud mõne olekumuutuse või kasutaja sisendiga. Peaaegu iga arvutisüsteemi osa välisseadmest operatsioonisüsteemi endani võib genereerida signaali, mida rakendus saab püüda ja seejärel töödelda. Signaali programmeerimine sarnaneb paljudes vormides sündmustepõhise programmeerimisega. Mõned levinumad signaalide programmeerimise kasutusalad on graafilised kasutajaliidesed, mis reageerivad kasutaja sisendile, võrgusuhtlus ja madala taseme programmid, mis hõivavad ja käitlevad konkreetseid süsteemisignaale.

Signaali arvutiprogrammeerimises võib defineerida kui sõnumit, sündmust või katkestust, olenevalt selle päritolust, süsteemi arhitektuurist või isegi programmeerija eelistustest. Laiemas plaanis on see näitaja, et mingi olek või andmeosa on muutunud ning mõnikord kaasneb sellega ka lisateave toimunud muutuse kohta. Signaali saab genereerida kasutaja klahvi vajutamisel, riistvarast, näiteks monitorist, kui toimub vertikaalne jälitamine, või isegi operatsioonisüsteemist, kui mälu eraldamise ajal juhtub midagi, näiteks lehetõrge.

Rakenduse sees võib signaali programmeerimine võtta mitut tüüpi arhitektuuri, kuid üks levinumaid on kuulaja või vaatleja mudel. Selle meetodi puhul saab kasutaja määratletud koodiosa mingil viisil edastada signaalitöötlejale, tavaliselt operatsioonisüsteemi sees, mis seejärel kutsub seda koodiosa, et töödelda mis tahes signaale, mis vastavad funktsiooni otsitavale. Signaali tüüp, mida funktsioon saab sageli käsitleda, määrab muutuja, mida nimetatakse signaalimaskiks, nii et mõnda signaali ei edastata rutiinidele, mis pole mõeldud nende käsitlemiseks.

Teist tüüpi signaalide programmeerimine hõlmab programmi, mis rakendab sissetulevaid signaale vastuvõtva järjekorda. See järjekord küsitletakse programmi peamises täitmisahelas ja programm reageerib, kui järjekorda siseneb signaal. Seejärel saab iga signaali loogiliselt sorteerida, käsitleda, ignoreerida või edastada teisele protsessile.

Signaali programmeerimisel võivad tekkida raskused samaaegsete protsesside või mitme keermega rakenduste kasutamisel. Tüsistused võivad tekkida, kui näiteks kaks eraldi lõime kuulavad kahe erineva kasutaja sisendseadme või kahe võrgupesa genereeritud signaale. Kui kaks kasutajat üritavad samaaegselt mõningaid andmeid muuta, võivad programmi andmed sünkroonimisest välja kukkuda ja näida igale kasutajale erinevalt. Lineaarse järjekorra kasutamine või lõime sünkroonimismeetodite rakendamine võib aidata seda olukorda vältida.