Was ist Signalprogrammierung?
"Signalprogrammierung" ist ein Begriff, der häufig verwendet wird, um ein Computerprogramm zu bezeichnen, das hauptsächlich als Reaktion auf Signale oder Ereignisse funktioniert, die durch eine Zustandsänderung oder durch Benutzereingaben erzeugt werden. Nahezu jeder Teil eines Computersystems, vom Peripheriegerät bis zum Betriebssystem selbst, kann ein Signal erzeugen, das von einer Anwendung erfasst und dann verarbeitet werden kann. In vielen Formen ähnelt die Signalprogrammierung der ereignisgesteuerten Programmierung. Einige der häufigsten Anwendungen für die Signalprogrammierung sind grafische Benutzeroberflächen, die auf Benutzereingaben, Netzwerkkommunikation und Low-Level-Programme reagieren, die bestimmte Systemsignale erfassen und verarbeiten.
Ein Signal in der Computerprogrammierung kann in Abhängigkeit von seiner Herkunft, der Systemarchitektur oder sogar der Präferenz des Programmierers als eine Nachricht, ein Ereignis oder ein Interrupt definiert werden. Im weitesten Sinne ist dies ein Indikator dafür, dass sich ein Zustand oder ein Teil der Daten geändert hat, und manchmal werden zusätzliche Informationen über die aufgetretene Änderung beigefügt. Das Signal kann vom Benutzer beim Drücken einer Taste erzeugt werden, von Hardware wie einem Monitor, wenn ein vertikaler Rücklauf auftritt, oder sogar vom Betriebssystem, wenn während der Speicherzuweisung etwas wie ein Seitenfehler auftritt.
Innerhalb einer Anwendung kann die Signalprogrammierung verschiedene Arten von Architekturen annehmen, eine der häufigsten ist jedoch ein Listener- oder Observer-Modell. Bei dieser Methode kann ein Teil des benutzerdefinierten Codes auf irgendeine Weise an einen Signal-Handler übergeben werden, der normalerweise im Betriebssystem vorhanden ist. Dieser Code wird dann aufgerufen, um alle Signale zu verarbeiten, die mit der von der Funktion gesuchten Funktion übereinstimmen. Die Art des Signals, mit dem eine Funktion häufig umgehen kann, wird durch eine Variable bestimmt, die als Signalmaske bezeichnet wird. Einige Signale werden daher nicht an Routinen weitergeleitet, die nicht dafür ausgelegt sind.
Eine zweite Art der Signalprogrammierung beinhaltet ein Programm, das eine Warteschlange implementiert, die eingehende Signale akzeptiert. Diese Warteschlange wird in der Hauptausführungsschleife des Programms abgefragt und das Programm reagiert, sobald ein Signal in die Warteschlange eingeht. Jedes Signal kann dann logisch sortiert, verarbeitet, ignoriert oder an einen anderen Prozess übergeben werden.
Einige Schwierigkeiten können bei der Signalprogrammierung auftreten, wenn gleichzeitig ablaufende Prozesse oder Multithread-Anwendungen verwendet werden. Die Komplikationen können auftreten, wenn beispielsweise zwei separate Threads auf Signale warten, die von zwei separaten Benutzereingabegeräten oder von zwei Netzwerk-Sockets generiert werden. Wenn zwei Benutzer gleichzeitig versuchen, einige Daten zu ändern, können die Programmdaten nicht mehr synchronisiert sein und für jeden Benutzer anders aussehen. Die Verwendung einer linearen Warteschlange oder das Implementieren von Thread-Synchronisationsmethoden kann dazu beitragen, diese Situation zu vermeiden.