Clojure - Agenten
Wie bereits mehrfach erwähnt, ist Clojure eine Programmiersprache, in der viele der Datentypen unveränderlich sind. Dies bedeutet, dass der Wert einer Variablen nur geändert werden kann, indem eine neue Variable erstellt und ihr der neue Wert zugewiesen wird. Clojure bietet jedoch einige Elemente, die einen veränderlichen Zustand erzeugen können. Wir haben gesehen, dass dies mit dem Atomdatentyp erreicht werden kann. Dies kann auch über Agenten erreicht werden.
AgentsErmöglichen Sie einen unabhängigen, asynchronen Wechsel einzelner Standorte. Agenten sind während ihrer gesamten Lebensdauer an einen einzelnen Speicherort gebunden und erlauben nur eine Mutation dieses Speicherorts (in einen neuen Zustand) als Ergebnis einer Aktion. Aktionen sind Funktionen (mit optional zusätzlichen Argumenten), die asynchron auf den Status eines Agenten angewendet werden und deren Rückgabewert zum neuen Status des Agenten wird.
Die folgenden Operationen sind in Clojure in Bezug auf Agenten möglich.
Sr.Nr. | Operationen & Beschreibung |
---|---|
1 | Agent
Ein Agent wird mit dem Befehl agent erstellt. |
2 | senden
Diese Funktion wird verwendet, um einen Wert an den Agenten zu senden. |
3 | Shutdown-Agenten
Diese Funktion wird verwendet, um laufende Agenten herunterzufahren. |
4 | abschicken
Es gibt Fälle, in denen einem Agenten eine Funktion zugewiesen wird, die von Natur aus blockiert. |
5 | warten auf
Da es eine Verzögerung gibt, wenn ein Wert eines Agenten aktualisiert wird, hat Clojure eine Funktion zum Warten bereitgestellt, mit der die Zeit in Millisekunden angegeben wird, um auf die Aktualisierung des Agenten zu warten. |
6 | erwarten
Blockiert den aktuellen Thread (auf unbestimmte Zeit!), Bis alle bisher von diesem Thread oder Agenten an die Agenten gesendeten Aktionen ausgeführt wurden. Blockiert fehlgeschlagene Agenten. |
7 | Agentenfehler
Gibt die Ausnahme zurück, die während einer asynchronen Aktion des Agenten ausgelöst wird, wenn der Agent ausfällt. Gibt null zurück, wenn der Agent nicht fehlschlägt. |